SICP 読み (173) 4.1.6 内部定義

問題 4.21 の a の Fibonacci 数列なソレを以下に。手続きを渡せる、というのは凄いな。てか、これって自前の eval で評価するとどうなるのかな。

(define fibo
  (lambda (n)
    ((lambda (fib)
       (fib fib n))
     (lambda (fb k)
       (cond ((= k 0) 0)
	     ((= k 1) 1)
	     (else (+ (fb fb (- k 1))
		      (fb fb (- k 2)))))))))

とゆー事で検討。以下を評価。

(eval '((lambda (n) ((lambda (fact) (fact fact n))
		     (lambda (ft k) (if (= k 1)
					1
					(* k (ft ft (- k 1)))))))
	10)
      env)

って試験作って色々確認してたんですが、要は

  • n が 10 に束縛されるフレームの中で
  • fact が (lambda (ft k) (if (= k 1) 1 (* k (ft ft (- k 1))))) に束縛されるフレームができてさらにその中で
  • (fact fact n) が eval される
  • fact が束縛されている手続きが (以下略

という事になるんでしょうか。微妙に言葉が足りていないかも。