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

发布于 2022-09-06 03:08:49 字数 369 浏览 13 评论 0

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

2.代码如下:

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

求值下面的这个表达式:

(test 0 (p))
      

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

巨坚强 2022-09-13 03:08:49

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

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

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

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

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

顾北清歌寒 2022-09-13 03:08:49

这段程序到底是要干嘛?

第一行又是干嘛?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文