分类:
2012-03-22 21:48:10
最近开始学习SCIP(计算机程序的构造和解释),开始就遇到一个问题。关于正则序和应用序。在课后习题1-5中,有如下定义:
(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
然后对如下表达式求值:
(test 0 (p))
问我们应用序求值和正则序求值的各自结果是什么?
先看正则序:正则序要求完全展开后在求值。此时test会返回为一个函数,0还是返回0,而(p)会进入死循环。
而应用序:则是先求值,(test 0 (p)) => (if (= 0 0) 0 (p))。此时if的判断为真,直接取第一个参数0,即可结束程序。
Powered by