SICP問題2.74

a. get-record手続き
事業所ファイルがどの事業所であるか判別するための型情報を含むタグ付構造である必要がある。

(define (get-record employee-name employee-file)
  ((get 'get-record (type-tag employee-file)) 
   employee-name
   (contents employee-file)))

※ => employee-name がタグ付でないのでapply-generic手続きは使用できない。

b.get-salary手続き

従業員レコードもどの事業所であるか判別するための型情報を含むタグ付構造である必要がある。get-salaryはどの事業所ファイルからも給与情報を返す汎用選択子となるので apply-generic手続きを使用して定義する。

(define (get-salary employee-record)
  (apply-generic 'get-salary employee-record))

※ => employee-recored はタグ付でなのでapply-generic手続きを使用する

c.find-employee-record手続き

(define (find-employee-record employee-name file-list)
  (define (iter rest-files)
    (if (null? rest-files)
	'()
	(let ((result (get-record (car rest-files))))
	  (if (null? result)
	      (iter (cdr rest-files))
	      result))))
  (iter file-list))

d. この企業が別の会社を合併した時に必要な変更
事業所と同様にファイル、従業員レコードにタグをつけ、各手続きの実装を行う変更が必要である。