1.结果
应用序求值,程序将进入死循环不会输出结果。
正则学求值,结果为0
------------------
2.分析
应用序
(test 0 (p)) -> (test 0 (p)的结果) 再展开。由于(p)是一个自循环函数,所以程序将陷入死循环,不会进入扩展。
正则序
(test 0 (p)) -> (if (= x 0) 0 (p)) -> 0
正则序不预先求值,而是等展开后再求值,由于if特殊操作,先对谓词运算,然后根据结果再对正确的分支进行计算,由于x=0,判断为真,直接输出0。不再对(p)进行计算了。
------------------
scheme的宏是正则序的,而宏扩展后的程序仍然是应用序的。可以应用这个特性做一些特殊的运算。
应用序求值,程序将进入死循环不会输出结果。
正则学求值,结果为0
------------------
2.分析
应用序
(test 0 (p)) -> (test 0 (p)的结果) 再展开。由于(p)是一个自循环函数,所以程序将陷入死循环,不会进入扩展。
正则序
(test 0 (p)) -> (if (= x 0) 0 (p)) -> 0
正则序不预先求值,而是等展开后再求值,由于if特殊操作,先对谓词运算,然后根据结果再对正确的分支进行计算,由于x=0,判断为真,直接输出0。不再对(p)进行计算了。
------------------
scheme的宏是正则序的,而宏扩展后的程序仍然是应用序的。可以应用这个特性做一些特殊的运算。