さかもとのブログ

つらつらと

SICP演習問題4.17

とりあえず張る.

(define (hoge1 x)
  (define a 1)
  (+ x a))
変換する場合
;;; M-Eval input:
#?="./evaluater.scm":348:(car body)
#?-    (define a 1)
#?=body
#?-    ((let ((a '*unassigned)) (set! a 1) (+ x a)))

;;; M-Eval value:
ok

;;; M-Eval input:
#?="./evaluater.scm":16:(procedure-environment procedure)
#?-    #0=(((hoge1 false true + - * / > < car cdr cadr cons null? se ...
#?="./evaluater.scm":348:(car body)
#?-    (set! a 1)
#?=body
#?-    ((set! a 1) (+ x a))
#?="./evaluater.scm":16:(procedure-environment procedure)
#?-    ((#0=(x) 1) . #1=(((hoge1 false true + - * / > < car cdr cadr ...
変換しない場合
;;; M-Eval input:
#?=body
#?-    ((define a 1) (+ x a))

;;; M-Eval value:
ok

;;; M-Eval input:
#?="./evaluater.scm":16:(procedure-environment procedure)
#?-    #0=(((hoge1 false true + - * / > < car cdr cadr cons null? se ...

letを評価すると新しくlambdaのフレームが作られるため,環境構造が変わる.
フレームを見る順は変わらないので,結果は変わらない.