我刚开始工作通过SICP(我自己;这不是一个班级),并且我一直在努力练习1.6几天,我似乎无法弄清楚。在cond
而言这是一个地方贾静雯重新定义if
,像这样:SICP练习1.6的解释是什么?
(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)))
那么接下来的问题问:“当阿丽莎试图以此来计算平方根说明会发生什么?”。 [如果有必要,我很高兴能重现其他程序(good-enough?
,improve
等),只是让我知道。]
现在,我知道会发生什么:它永远不会返回一个值,这意味着程序无限递归。我无法解释为什么会发生这种情况。无论if
和new-if
之间存在什么细微差别,都无法避免。任何和所有的帮助非常感谢。
“递归”的动词形式是“recurse”,所以它“递归”。 – 2009-07-23 11:57:29
你的问题标题是错误的:你指的是练习1.6,而不是1.4。 – systemovich 2010-12-12 15:24:23