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