(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
(test 0 (p))
分别在使用applicative-order evaluation和normal-order evaluation的interpreter上执行(test 0 (p)),分析其结果?
当在applicative-order的情况下,首先会evaluate operator(test) 和operands(0 和 (p)),当evaluate到p的时候,就会进去死循环了。
当在normal-order的情况下,书中是这样写的,
引用
it would first substitute operand expressions for parameters until it obtained an expression involving only primitive operators
因此,(test 0 (p))会首先被展开成(if(= 0 0) 0 (p)),而先不去管p,因此得到了结果0.