Exercise 1.46
(define (iterative-improve good-enough? improve)
(define (iter guess)
(if (good-enough? guess)
guess
(iter (improve guess))))
iter)
(define (sqrt x)
((iterative-improve
(lambda (guess)
(< (abs (- (square guess) x)) tolerance))
(lambda (guess)
(average guess (/ x guess))))
1.0))
(sqrt 2) ~> 1.4142156862745097
(define (fixed-point f first-guess)
((iterative-improve
(lambda (guess)
(< (abs (- guess (f guess))) tolerance))
f)
first-guess))
This is slightly different from the original fixed-point because it returns guess when it’s good enough, not next (so the original always does one more improvement).