SICPゼミ第54回
練習問題4.28
演算子がevalの中で評価されない(遅延されてしまう)場合,すなわち複合手続きが引数として呼ばれた場合,演算子を評価しないままthunkがそのまま返ってきてしまう事がある.
例えば
(define (g x) (+ x 1)) (define (f g x) (g x))
とした場合に,(g 2) を呼ぶとするとこれは eval に渡るのは基本手続きのみであり,complex-application? 節が呼ばれない.そのため普通に eval が基本手続きとして値評価を行い,問題なく動く. 一方,(f g 2) を呼ぶとする.このとき actual-value でないとすると,引数である g が thunk のまま eval に渡されてしまい,エラーとなる.
練習問題4.29
メモ化してないと,引数が評価が必要な値のとき何回も評価が必要でつらい.引数をn回足すとかつらいし,フィボナッチとかやると破滅する.