>>744
ちがうって。kawaはただのcall-by-valueだよ。

call-by-nameで生じる無駄な計算を避けるのがcall-by-need。

call-by-name (normal order):
((lambda (x) (+ x x)) (* 10 10))
-> (+ (* 10 10) (* 10 10))
-> (+ 100 (* 10 10))
-> (+ 100 100)
-> 200

call-by-need だと、(* 10 10)をコピーせずに、同じ式を
共有して
((lambda (x) (+ x x)) (* 10 10))
-> (+ (* 10 10) (* 10 10))    ; 2つの(* 10 10)は同一のセルで表す
-> (+ 100 100)
-> 200
みたいになる。

delayとforceを使った場合、forceするたびにdelayの引数を計算
しなおすとcall-by-name。一度forceされたら結果をキャッシュして
計算し直さないのがcall-by-need。(ふつうの実装は後者。)