Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
42 lines (37 sloc) 1.39 KB

本题是很好的与现实场景联系起来的开放性题。

这里分布在各地的分支机构相当于“数据标志”,需要执行的操作是get-record,操作表如下:

             branch1 |  branch2 | ....
           +---------------------------
get-record |   op1   |    op2   | ....
           +---------------------------

a)

; 这里用id表示雇员的唯一标示,全局唯一。
; 每个分支结构都需要提供一种get-record的实现,并把他们put进我们的系统中
(define (get-record branch id)
  ((get 'get-record branch) id))

b)

纪录中应该包含salary的信息,同时分支结构应该实现获取本机构的get-salary方法。这时的操作表如下:

             branch1 |  branch2 | ....
           +---------------------------
get-record |   op1   |    op2   | ....
           +---------------------------
get-salary |   op3   |    op4   | .....          
           +---------------------------

c)

(define (find-employee-record branch-list id)
  (if (null? branch-list)
    (error "can't not find " id))
    (let ((employee (get-record (car branch-list) id)))
      (if employee
        employee
        (find-employee-record (cdr branch-list ) id))))

d)

如果新增了个分支机构,现有的系统完全不用修改,只需要新增的机构实现相应的get-recordeget-salary方法即可。