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 の実装見たい。