home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / elk-2_0.lha / elk-2.0 / examples / scheme / fix < prev    next >
Encoding:
Text File  |  1991-09-25  |  565 b   |  29 lines

  1. ;;; -*-Scheme-*-
  2. ;;;
  3. ;;; from BYTE Feb. 88 page 208
  4.  
  5. (define (fixed-point f initial-value)
  6.   (define epsilon 1.0e-10)
  7.   (define (close-enough? v1 v2)
  8.     (< (abs (- v1 v2)) epsilon))
  9.   (define (loop value)
  10.     (let ((next-value (f value)))
  11.       (if (close-enough? value next-value)
  12.       next-value
  13.       (loop next-value))))
  14.   (loop initial-value))
  15.  
  16. (define (average-damp f)
  17.   (lambda (x)
  18.     (average x (f x))))
  19.  
  20. (define (average x y)
  21.   (/ (+ x y) 2))
  22.  
  23. (define (sqrt x)
  24.   (fixed-point (average-damp (lambda (y) (/ x y)))
  25.            1))
  26.  
  27. (print (sqrt 2))
  28. (print (sqrt 4))
  29.