SICP 問題 5.40
翻訳時環境を維持し,compile-lambda-bodyで拡張するように変更する.
(define (compile-lambda-body exp proc-entry ct-env) ;; 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するときに引数にct-envを取るように書く手続きを変更する.