2016/02/09
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を取るように書く手続きを変更する.