SICP Practice

Practice 2.74

每个分支机构的文件结构都可能不同,所以可以把每个分支机构的选择函数保存在总部,通用过程get-record根据每个分支机构的不同选取不同的选择函数:

  sub1 sub2 sub3
get-record fun1 fun2 fun3

所以每个分支结构应该具有一个唯一的标识,所以分支的file可以统一这样构造:

(define (make-file tag file)
  (cons tag file))

构造通用过程get-record:

(define (get-record file employee)
  ((get 'get-record (car file)) file employee))

每个分支的record结构也可能不同,所以get-salary也要在保存在总公司

  sub1 sub2 sub3
get-salary fun4 fun5 fun6

构造通用过程get-salary

(define (get-salary file employee)
  ((get 'get-salary (car file)) (get-record file employeee)))

find-employee-record只要在表里递归查找就可以了

(define (find-employee-record files employee)
  (if (null? files)
      '()
	  (cons (get-record (car files) employee) (find-employee-record (cdr files)))))

当要并购新公司的时候,只需要把新公司独有的选择函数put进选择函数的记录里就行了