Blob


1 (defun iterative-improve (good-enough? improve)
2 (lambda (first-guess)
3 (labels ((improve-iter (guess)
4 (let ((improved-guess (funcall improve guess)))
5 (if (funcall good-enough? guess improved-guess)
6 improved-guess
7 (improve-iter improved-guess)))))
8 (improve-iter first-guess))))
9 (defun improved-sqrt (num)
10 (funcall (iterative-improve
11 (lambda (x y)
12 (let ((ratio (/ x y)))
13 (and (< ratio 1.001) (> ratio 0.999))))
14 (lambda (guess)
15 (average guess (/ num guess))))
16 1.0))
17 (defvar *tolerance* 0.00001)
18 (defun improved-fixed-point (f first-guess)
19 (funcall (iterative-improve
20 (lambda (x y)
21 (< (abs (- x y)) *tolerance*))
22 (lambda (guess)
23 (funcall f guess)))
24 first-guess))