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))
14 (defun dampen-sqrt (x)
15 (fixed-point
16 (lambda (y)
17 (average y (/ x y)))
18 1.0))
20 (fixed-point (lambda (x) (1+ (/1 x))) 1.0)
22 (defvar tolerance 0.00001)
23 (defun fixed-point (f first-guess)
24 (labels (
25 (close-enough? (v1 v2)
26 (< (abs (- v1 v2)) tolerance))
27 (try (guess)
28 (format t "Trying ~F~%" guess)
29 (let ((next (funcall f guess)))
30 (if (close-enough? guess next)
31 next
32 (try next)))))
33 (try first-guess)))
34 (defun average (a b)
35 (/ (+ a b) 2))
36 (defun xx (x)
37 (/ (log 1000) (log x)))
38 (defun dampen-xx (x)
39 (average x (xx x)))
40 (print (fixed-point #'xx 2.0))
41 (print (fixed-point #'dampen-xx 2.0))