如何理解scheme解释器采用哪种求值序的过程?

1.最近在看SCIP, 书中说,Ben Bitdiddle发明了一种检测方法, 能够确定解释器究竟采用哪种序求值, 是正则序还是应用序,他定义了下面两个过程:

2.代码如下:

(define (p) (p))
(define (test x y)
  (if (= x 0)
      0
      y))
     

求值下面的这个表达式:

(test 0 (p))
      

3.如果是应用序,应该是什么情况,如果是正则序,又是什么情况(无论采用正则序或者应用序, 假定特殊形式if的求值规则总是一样的. 其中谓词部分先行求值, 根据其结果确定随后求值的子表达式部分.)

阅读 3.6k
2 个回答

其实就是理解,是先化简式子再计算结果,还是先计算部分结果再化简式子。

上面的式子(test 0 (p))例子,你可以理解成:

如果x = 0, 就输出0;
如果x != 0, 就无限循环

按照一直化简式子的方案,他不会马上计算x是否等于0,而是一直展开循环,这样,这个程序就一直执行下去;
按照先求部分值的方式,则是先计算x = 0,此时就马上输出0。

如果还不理解,可以理解成解释算式时是广度优先还是深度优先

新手上路,请多包涵

这段程序到底是要干嘛?

第一行又是干嘛?

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