Blob


1 (defvar *tolerance* 0.00001)
2 (defun fixed-point (f first-guess)
3 (labels (
4 (close-enough? (v1 v2)
5 (< (abs (- v1 v2)) *tolerance*))
6 (try (guess)
7 (let ((next (funcall f guess)))
8 (if (close-enough? guess next)
9 next
10 (try next)))))
11 (try first-guess)))
12 (defun average (a b)
13 (/ (+ a b) 2))
15 (defun dampen-sqrt (x)
16 (fixed-point
17 (lambda (y)
18 (average y (/ x y)))
19 1.0))
21 (defun dampen-root (x n)
22 (fixed-point
23 (lambda (y)
24 (average y (/ x (expt y (1- n)))))
25 1.0))