Blob


1 (define (search f neg-point pos-point)
2 (let ((midpoint (average neg-point pos-point)))
3 (if (close-enough? neg-point pos-point)
4 midpoint
5 (let ((test-value (f midpoint)))
6 (cond ((positive? test-value)
7 (search f neg-point midpoint))
8 ((negative? test-value)
9 (search f midpoint pos-point))
10 (else midpoint))))))
11 (define (close-enough? x y)
12 (< (abs (- x y)) 0.001))
14 (define (half-interval-method f a b)
15 (let ((a-value (f a))
16 (b-value (f b)))
17 (cond ((and (negative? a-value) (positive? b-value))
18 (search f a b))
19 ((and (negative? b-value) (positive? a-value))
20 (search f b a))
21 (else
22 (error "Values are not of opposite sign" a b)))))
23 (define tolerance 0.00001)
24 (define (fixed-point f first-guess)
25 (define (close-enough? v1 v2)
26 (< (abs (- v1 v2)) tolerance))
27 (define (try guess)
28 (let ((next (f guess)))
29 (if (close-enough? guess next)
30 next
31 (try next))))
32 (try first-guess))
34 (fixed-point (lambda (y) (+ (sin y) (cos y)))
35 1.0)
37 (define (sqrt x)
38 (fixed-point (lambda (y) (average y (/ x y)))
39 1.0))
41 (define (average x y)
42 (/ (+ x y) 2))
44 (define golden-ratio (fixed-point (lambda (x) (+ 1 (/ 1 x)))
45 1.0))
47 (define (test-case actual expected)
48 (load-option 'format)
49 (newline)
50 (format #t "Actual: ~A Expected: ~A" actual expected))
52 (test-case golden-ratio (/ (+ 1.0 (sqrt 5.0)) 2.0))