LISP Scheme Part2
■ このスレッドは過去ログ倉庫に格納されています
0353デフォルトの名無しさん
NGNGalist = 環境みたいに考えると、
「環境を閉じ込める」=「alistを持つ」
となっちゃうが、これはScheme的には正しくない。
具体的な実装に近い言葉で言うと、
・binding constructは新たな「環境オブジェクト」をつくる。
・トップレベルの関数は、みな同一の「環境オブジェクト」を閉じ込める。
・defineは「環境オブジェクト」の名前表の先頭に
新たな名前の束縛を追加(prepend)する。
と思えば良いのではないか。
(define bar ...)
(define foo (lambda ...)) ;; <- この関数には環境が閉じ込められる。
(define bar ...) ;; <-上で閉じ込めたのと同じ環境の
名前表の「先頭に」barの束縛を追加する。
なので、fooに閉じ込めた環境のなかで、barがshadowされる。
こういう風に考えないとinternal defineが
複数個あるときの解釈がうまくいかない。
■ このスレッドは過去ログ倉庫に格納されています