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

問題5.40

(define (compile-lambda-body exp proc-entry ct-env)
  (let ((formals (lambda-parameters exp)))
       (append-instruction-sequences
         (make-instruction-sequence '(env proc argl) '(env)
                                    `(,proc-entry
                                       (assign env (op compiled-procedure-env) (reg proc))
                                       (assign env
                                               (op extend-environment)
                                               (const ,formals)
                                               (reg argl)
                                               (reg env))))
         (compile-sequence (lambda-body exp) 'val 'return (cons formals ct-env)))))

ct-env を引数として渡すように各手続きを修正する。
compile 手続きのみ掲載しておく。

;;; 翻訳系のトップレベルの振り分け処理 compile
(define (compile exp target linkage ct-env) ; ex5.40
  (cond ((self-evaluating? exp)
         (compile-self-evaluating exp target linkage))
        ((quoted? exp) (compile-quoted exp target linkage))
        ((variable? exp)
         (compile-variable exp target linkage))
        ((assignment? exp)
         (compile-assingment exp target linkage ct-env)) ; ex5.40
        ((definition? exp)
         (compile-definition exp target linkage ct-env)) ; ex5.40
        ((if? exp) (compile-if exp target linkage ct-env)) ; ex5.40
        ((lambda? exp) (compile-lambda exp target linkage ct-env)) ; ex5.40
        ((begin? exp)
         (compile-sequence (begin-action exp)
                           target
                           linkage
                           ct-env)) ; ex5.40
        ((cond? exp) (compile (cond->if exp) target linkage ct-env)) ; ex5.40
        ((application? exp)
         (compile-application exp target linkage ct-env)) ; ex5.40
        (else
          (error "Unknown expression type -- COMPILE" exp))))
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»