Scheme解释器中正则序是怎么回事?

新手上路,请多包涵

在sicp中提到正则序是“先展开然后归约”,然而我没看到‘展开’和‘归约’的定义。
我想问(+ 3 3)=>6 为什么我们说他是‘归约’,不称为‘展开’?
我觉得‘归约’和‘展开’都是将运算符应用于实参,我找不到区别。
然后求教正则序求值步骤到底是怎么样的?

阅读 3.7k
2 个回答
新手上路,请多包涵

简单地说一下这里的展开和归约

(define A (* 5 5))
(define B (+ A 
(define C (- B B))
A
B
C

规约:将表达式计算为值,例如A。
展开:用表达式替换形参,例如将A代入B,得到展开的表达式。

现在再说一下,正则序和应用序
正则序:先展开再归约,例如C表达式替换成A表达式,然后在按照规则一步一步计算值。
应用序:先归约,再展开。先将形参的值计算出,将值代入计算式。例如将A的值算出等于25,将25代换B中的A再计算。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进