在sicp中提到正则序是“先展开然后归约”,然而我没看到‘展开’和‘归约’的定义。
我想问(+ 3 3)=>6 为什么我们说他是‘归约’,不称为‘展开’?
我觉得‘归约’和‘展开’都是将运算符应用于实参,我找不到区别。
然后求教正则序求值步骤到底是怎么样的?
在sicp中提到正则序是“先展开然后归约”,然而我没看到‘展开’和‘归约’的定义。
我想问(+ 3 3)=>6 为什么我们说他是‘归约’,不称为‘展开’?
我觉得‘归约’和‘展开’都是将运算符应用于实参,我找不到区别。
然后求教正则序求值步骤到底是怎么样的?
简单地说一下这里的展开和归约
(define A (* 5 5))
(define B (+ A
(define C (- B B))
A
B
C
规约:将表达式计算为值,例如A。
展开:用表达式替换形参,例如将A代入B,得到展开的表达式。
现在再说一下,正则序和应用序
正则序:先展开再归约,例如C表达式替换成A表达式,然后在按照规则一步一步计算值。
应用序:先归约,再展开。先将形参的值计算出,将值代入计算式。例如将A的值算出等于25,将25代换B中的A再计算。
可以看这里 http://staff.ustc.edu.cn/~xyfeng/teaching/TOPL/lectureNotes/04_lambda.pdf
如果有基础,可以直接跳到第34页