;; adapted from Program 6.2 (define square-root ; TYPE: (-> (number) number) (lambda (a) (letrec ((improve ; TYPE: (-> (number) number) (lambda (u) (/ (+ u (/ a u)) 2))) (next-estimate ; TYPE: (-> (number) number) (lambda (u) ; ENSURES: result*result is ; close enough to a (let ((v (improve u))) (if (close-enough? u v) v (next-estimate v)))))) (next-estimate 1.0)))) (define close-enough? ; TYPE: (-> (number number) boolean) (lambda (u v) (< (abs (- u v)) *tolerance*))) (define *tolerance* 0.000005)