(define (p) (p)) (define (test x y) (if (= x 0) 0 y))
作用的順序の場合
無限ループする
(test 0 (p)) => (test 0 (p)) => (test 0 (p (p (p) (p))))...
正規順序の場合
まず関数testを展開する
(test x y) => (if (= x 0) 0 y) ;xを代入する(yはまだ) => (if (= 0 0) 0 y) => 0
結論
- 作用的順序の場合は無限ループ
- 正規順序の場合は0を返す