(define (iterative-improve good-enough? improve) (lambda (first-guess) (define (try guess) (let ((improved-guess (improve guess))) (if (good-enough? guess improved-guess) guess (try improved-guess)))) (try first-guess))) (define (sqrt-ave x) (define (good-enough? x y) (let ((tolerance 0.00001)) (< (abs (- x y)) tolerance))) (define (improve guess) (average guess (/ x guess))) ((iterative-improve good-enough? improve) 1.0)) (define (average x y) (/ (+ x y) 2)) (define (fixed-point f first-guess) (define (close-enough? v1 v2) (< (abs (- v1 v2)) tolerance)) ((iterative-improve close-enough? f) first-guess)) (define (average-damp f) (lambda (x) (average x (f x)))) (define (sqrt-fp x) (fixed-point (average-damp (lambda (y) (/ x y))) 1.0))