(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter(improve guess x)
x)))
(define (improve guess x)
(average guess(/ x guess)))
(define (average x y)
(/ (+ x y) 2))
(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.0001))
(define (square x)
(* x x))
(define (sqrt-g x)
(sqrt-iter 1.0 x))
这是一个用于 sqrt 的程序。问题是当您尝试使用 new-if 将 if 替换为 new-if 时会发生什么。
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter(improve guess x)
x)))
这是新的,如果
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause)))
我的意见是两个程序的结果是一样的。因为 new-if 和 if 可以产生相同的结果。
但是,new-if 被证明是错误的,因为当我尝试时它是一个死循环。
所以为什么?