我刚刚开始学习 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
都无法理解。非常感谢任何和所有帮助。