(wat-aro)

生きてます

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