(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这种没有固定结构的递归,更是要倍加小心,才能尽量避免犯低级错误。
浙公网安备 33010602011771号