SICP练习1.6的解答

cond和if有着同样的效果,为啥用cond实现的new-if不能用于一些函数?

我自己没想明白,在网上搜集了一下答案,部分解答觉得有道理,整理如下:

解答1:

if和cond都是特定的求值顺序, 
即先对判断求值,再根据其结果选择需要求值的部分 
既不是应用序也不是正则序 
new-if改变了if的特殊性, 
如果解释器是应用序,则参数需要先行代换,而导致问题 
如果解释器是正则序,则好像无法支持递归,同样也有问题

解答2:

http://blog.csdn.net/xuanyun/article/details/1331872

引用原文:

“我们知道Scheme的解释器在一般情况下采用应用序(Applicative Order)来对表达式求值,简单来说就是解释器总是试图首先对操作符,

操作数等进行求值,然后才会将操作数应用到操作符上进行运算。在我们的newif例子中,解释器试图首先对newif的三个操作数predication ,

then-clause和 else-clause进行求值,完成求值后才会进行cond运算。而在阶乘函数中,else-clause就是(* n (n! (- n 1)))表达式。

在这个表达式的求值过程中又递归调用了n!函数,如此反复,每次都在有机会进行cond运算之前就调用了n!,由于cond从无机会进行运算,

递归的结束条件永远不会被测试,递归调用无限进行,直到Stack Overflow... 那么为什么直接在n!中直接使用if或cond就一切正常呢?

原因是cond或if作为特殊的运算符,含有它们的表达式的求值实际上是不遵循应用序的,实际上,含有cond或if的表达式求值时总是要先对条件

操作数进行求值直到获得true或false,然后再根据得到的结果决定是否对别的操作数进行求值。在采用if的n!版本中,解释器总是先求值(= n 1),

再决定对哪个分支求值。这样由于递归的结束条件在每次调用中都是最先求值,无限递归就不会出现了。而newif对cond包装后,cond的特殊性

就被遮盖了,newif被当作了普通表达式,灾难出现。”

转载于:https://www.cnblogs.com/wenjingu/p/3229621.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值