環境フレームモデル
1.1.8とかでsqrtで使用する各手続きを内部定義した場合、
(define (sqrt x) (define (good-enough? guess) (< (abs (- (square guess) x)) 0.001)) (define (improve guess) (average guess (/ x guess))) (define (sqrt-iter guess) (if (good-enough? guess) guess (sqrt-iter (improve guess)))) (sqrt-iter 1.0))
内部定義の中のxの正体は何だ?と言う話。
これは、1章だけでは理解できなくて、p.138の『評価の環境モデル』を読む必要がある。
ミソとしては、図3.11で内部定義を実際に実行する環境フレームが全てE1の下にぶら下がってできる、と言う部分。sqrt-iterやgood-enoughなどを評価する際には、E1を親としたフレームができるため、xの値をルックアップすることができる。
と言うことで、内部定義の中では、xを自由変数にしても、上位のフレームで束縛されているので、値を参照することができる。