SICP 読み (158) 4.1.2 式の表現
前回エントリで出てきた以下の式
(apply (eval '(lambda (x) (+ x 1)) newenv) (list-of-values '(x) newenv))
apply がどう評価するか、をはしょっているので自己フォロー。
ちなみに上記は
((lambda (x) (+ x 1)) x)
が eval で application と判断されて apply に渡された時の状態。
(eval '(lambda (x) (+ x 1)) newenv)
は eval で以下の手続きが適用され
(make-procedure (lambda-parameters exp) (lambda-body exp) env))
compount-procedure と判断されるので以下のソレが適用。
(eval-sequence (procedure-body procedure) (extend-environment (procedure-parameters procedure) arguments (procedure-environment procedure)))
これは凄い。
- eval-sequence を使ってるのが頭良スギ
- ここで新たな環境作って引数と値の解決もナニ
3.2 を再読の必要あり。あと、scheme の実装見たい。