問題5.40 – SICP(計算機プログラムの構造と解釈)その291
2009年12月24日
問題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))))
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542