正規順序と作用的順序による評価
SICP問題1.5
手続き
(define (p) (p)) (define (test x y) (if (= x 0) 0 y))
を定義した後で、
(test 0 (p))
を評価する。
正規順序の場合
展開の様子をトレースしてみる。正規順序は完全に展開する。そのため引数はそのままに、評価対象の式の手続き部分を展開していく。
(test 0 (p)) (if (= 0 0) 0 (p)))
pは自分自身を呼び出す関数なのでこれ以上は展開できない。if文が評価されて、述語が真なので0が返る。