問題1.5 分からないことばかりさ。
問題1.5
実行結果 = 0
(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))(test 0 (p))
なんだろね。
さっぱり問題の意味がわからない。
ネットで色々と見てみると、
・一般的なScheme実装は作用的順序らしい。
作用的順序=完全に展開するらしい。
つまりこんな感じに動くらしい。
って感じらしい。
(test 0 (p))
→(p)を評価しようとして(p)を見る。(無限ループ)
・正規順序ってのは引数が必要になるまで評価しない。らしい。
だから以下のように0を返却することができる。
(test 0 (p))
→ (if (= 0 0) 0 (p)))
→ 0
DrSchemeで0が返却されたのが謎でしたが
正規順序で評価してくれたからなのかな。
(2008-1-28 修正しました。ご指摘ありがとうございました。)