如何理解scheme解释器采用哪种求值序的过程?
1.最近在看SCIP, 书中说,Ben Bitdiddle发明了一种检测方法, 能够确定解释器究竟采用哪种序求值, 是正则序还是应用序,他定义了下面两个过程:
2.代码如下:
(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
求值下面的这个表达式:
(test 0 (p))
3.如果是应用序,应该是什么情况,如果是正则序,又是什么情况(无论采用正则序或者应用序, 假定特殊形式if的求值规则总是一样的. 其中谓词部分先行求值, 根据其结果确定随后求值的子表达式部分.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
其实就是理解,是先化简式子再计算结果,还是先计算部分结果再化简式子。
上面的式子
(test 0 (p))
例子,你可以理解成:按照一直化简式子的方案,他不会马上计算x是否等于0,而是一直展开循环,这样,这个程序就一直执行下去;
按照先求部分值的方式,则是先计算x = 0,此时就马上输出0。
如果还不理解,可以理解成解释算式时是广度优先还是深度优先。
这段程序到底是要干嘛?
第一行又是干嘛?