問題1.5 分からないことばかりさ。

問題1.5


(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))

(test 0 (p))

実行結果 = 0

なんだろね。
さっぱり問題の意味がわからない。
ネットで色々と見てみると、

・一般的なScheme実装は作用的順序らしい。
作用的順序=完全に展開するらしい。
つまりこんな感じに動くらしい。


(test 0 (p))
→(p)を評価しようとして(p)を見る。(無限ループ)
って感じらしい。


・正規順序ってのは引数が必要になるまで評価しない。らしい。
だから以下のように0を返却することができる。


(test 0 (p))
→ (if (= 0 0) 0 (p)))
→ 0

DrSchemeで0が返却されたのが謎でしたが
正規順序で評価してくれたからなのかな。

(2008-1-28 修正しました。ご指摘ありがとうございました。)