写点什么

SICP 习题解答 1.6

用户头像
十元
关注
发布于: 2021 年 02 月 21 日

练习 1.6

1). 假设传入参数 6,执行 (sqrt-iter 1 6),sqrt-iter 为普通过程,实参取代形参,然后对表达式求值

(new-if (good-enough? 1 6)     1     (sqrt-iter (improve 1 6)                6))
复制代码

2). new-if 也是普通过程,按应用序对它的 3 个参数求值,

第一个 值为 false,

第二个 值 为 1,

第三个 sqrt-iter 调用 sqrt-iter 自身,又开始了一次循环,这时候 第 1 步 执行的 (sqrt-iter 1 6)还在等着 new-if 的值,而 new-if 还在等着 第三个 参数的 sqrt-iter 的值。sqrt-iter 调用自身,求值新的 new-if,... 新的 sqrt-iter,无限递归,永远求不出来。


如果是特殊形式的 if,每一次都先检查 good-enough? 的值,第一次为 false,对 sqrt-iter 求值,经过一定次数,good-enough? 为 true,就返回第二项的值,不再对第三项 sqrt-iter 求值。


区别是 new-if 是普通过程,每次执行先对三个表达式求值,不检查 good-enough? 是真是假,一直递归下去。


; 虽然书看的有点慢,但是感觉很好,这个题也很好,帮我解放了思想。如果你真的理解了,或者自以为理解了,不管对不对,都应该能讲出来。


用户头像

十元

关注

还未添加个人签名 2018.09.26 加入

这人眼高手低 夸夸其谈

评论

发布
暂无评论
SICP 习题解答 1.6