我刚刚开始通过SICP(我自己;这不适合一个班级),我已经在练习1.6中苦苦挣扎了几天,我似乎无法弄明白.这是Alyssa重新定义if的方式cond,如下所示:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause))
Run Code Online (Sandbox Code Playgroud)
她在一些简单的情况下成功测试它,然后用它来重新编写平方根程序(它工作得很好if):
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
Run Code Online (Sandbox Code Playgroud)
然后问题是:"当Alyssa试图用它来计算平方根时会发生什么?解释." [如果有必要,我很高兴能重现其他程序(good-enough?,improve,等),只是让我知道.]
现在,我知道会发生什么:它永远不会返回一个值,这意味着程序无限地递归.我无法解释为什么会这样.无论之间存在什么微妙的差异,if并且new-if正在逃避我.任何和所有帮助非常感谢.