33 lines
609 B
Scheme
33 lines
609 B
Scheme
|
(define rootfinder
|
||
|
(let ((epsilon 1e-8))
|
||
|
(lambda (p a b)
|
||
|
(let ((mid (/ (+ a b) 2.0)))
|
||
|
(if (< (- b a) epsilon) mid
|
||
|
(let
|
||
|
((s1 (if (> (p a) 0) 'pos 'neg))
|
||
|
(s2 (if (> (p mid) 0) 'pos 'neg)))
|
||
|
(if (eq? s1 s2)
|
||
|
(rootfinder p mid b)
|
||
|
(rootfinder p a mid))))))))
|
||
|
|
||
|
(define sqrteq
|
||
|
(lambda (a)
|
||
|
(lambda (x)
|
||
|
(- (* x x) a))))
|
||
|
|
||
|
(define r5 (rootfinder (sqrteq 5) 0 5))
|
||
|
r5
|
||
|
(* r5 r5)
|
||
|
|
||
|
(define cbrteq
|
||
|
(lambda (a)
|
||
|
(lambda (x)
|
||
|
(- (* x x x) a))))
|
||
|
|
||
|
(define cr7 (rootfinder (cbrteq 7) 0 7))
|
||
|
cr7
|
||
|
(* cr7 cr7 cr7)
|
||
|
|
||
|
(define pi (rootfinder (lambda (x) (cos (/ x 2))) 3 4))
|
||
|
pi
|