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のフレームが作られるため,環境構造が変わる.
フレームを見る順は変わらないので,結果は変わらない.