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 next10 (try next)))))11 (try first-guess)))12 (defun average (a b)13 (/ (+ a b) 2))15 (defun dampen-sqrt (x)16 (fixed-point17 (lambda (y)18 (average y (/ x y)))19 1.0))21 (defun dampen-root (x n)22 (fixed-point23 (lambda (y)24 (average y (/ x (expt y (1- n)))))25 1.0))