問題5.13 – SICP(計算機プログラムの構造と解釈)その262

問題5.13

make-new-machinelookup-register 手続きで、引数 name に該当するレジスタが見つからない場合に name レジスタを作成するように変更する。

;;;; 修正前の make-new-machine
(define (make-new-machine)
  ;; 省略
            (define (lookup-register name)
              (let ((val (assoc name register-table)))
                   (if val
                       (cadr val)
                       (error "Unknown register:" name)))) ; name がレジスタテーブルに登録されていない場合エラーとなる
  ;; 省略
            dispatch)))

;;;; 修正後の make-new-machine
(define (make-new-machine)
  ;; 省略
            (define (lookup-register name)
              (let ((val (assoc name register-table)))
                   (if val
                       (cadr val)
                       (begin ; name がレジスタテーブルに登録されていない場合、登録を行う。
                         (allocate-register name)
                         (lookup-register name)))))
  ;; 省略
            dispatch)))
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»