SICP之第一章_1.6

(define (new-if predicate then-clause else-clause)
    (cond (predicate then-clause)
             (else else-clause)))

(define (sqrt-iter guess x)
    (new-if (good-enough? guess x)
                guess
                (sqrt-iter (improve guess x)
                x)))

当用new-if替代if或cond时,它忽略了自定义函数和if,cond的区别:

if,cond:先检测是否满足条件,如满足条件,执行动作(clause)

new-if:先将参数计算出来并代入函数,再判断是否满足条件,以及执行何种动作(clause)

总而言之,以此书至此章的技术来看,在递归函数中是不可以使用自定义函数的,否则将陷入死循环!

以个人观点而言,遇到递归的地方三思为妙,尤其是对于Scheme这种没有固定结构的递归,更是要倍加小心,才能尽量避免犯低级错误。

原文地址:https://www.cnblogs.com/codingpenguin/p/2718842.html