SICP 习题(1.5)解题总结:应用序和正则序

SICP的习题1.5 主要讲的是函数参数的求值方式,包括应用序和正则序。

解题前如果发现自己对应用序和正则序还不是太清楚,就需要重新看看1.1.5节“过程应用的代换模型”,对应用序和正则序有了较清楚的了解后解习题1.5就比较简单了。


先看看题目,题目讲的是一个叫Ben Bitdiddle的人发明了一种检测方法,可以确定解释器使用的使用那种求值序,就是判断解释器是使用应用序还是正则序求值。

他的方法是定义下面两个过程:

(define (p) (p))

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

然后执行下面的表达式:

(test 0 (p))


题目问我们,如果解释器是应用序求值会看到什么情况,如果是正则序又会看到什么情况。

如果对应用序和正则序理解比较透彻的同学可以直接读代码想到结果。

如果不是很清楚的话简单的方法就是在mit-scheme环境里试一下上面的过程。结果就是你的mit-Scheme环境“死机”了,就是没有反应了,原因是mit-Scheme使用的是应用序,当解释器求(test 0 (p))的值的时候会尝试求出参数0和参数(p)的值,参数0没什么好求的,已经是基本数字,参数(p)就不好求值了,解释器发现(p)是一个过程,执行它返回的结果还是(p),于是又求(p)的值,一直下去,子子孙孙无穷溃也,于是解释器就“死机”了。

更广泛地

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值