我刚刚开始通过SICP工作(我个人;这不是一节课),而且我在练习1.6中苦苦挣扎了几天,但我似乎无法弄清楚。这是Alyssa根据进行重新定义if
的方法cond
,如下所示:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause))
她在一些简单的情况下成功地对其进行了测试,然后使用它来重写平方根程序(与配合使用就可以了if
):
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
然后问题问:“当Alyssa试图用它来计算平方根时会发生什么?解释。” [如果有必要,我很高兴能重现其他程序(good-enough?
,improve
,等),只是让我知道。]
现在,我知道会发生什么:它永远不会返回值,这意味着程序可以无限递归。我只是无法解释为什么会这样。两者之间存在任何细微的差异,if
并且使new-if
我难以理解。任何和所有帮助非常感谢。