Exercise 1.13

Posted on Wednesday, September 12th, 2007

Ok, so I’m not taking this class to learn about math proofs so instead I wrote a program to test out the equations:


(define (fib n)
  (cond ((= n 0) 0)
        ((= n 1) 1)
        (else (+ (fib (- n 1))
                 (fib (- n 2))))))

(define (o) (/ (+ 1 (sqrt 5))
              2))

(define (u) (/ (- 1 (sqrt 5))
              2))

(define (proof n)
  (/ (- (exp (o) n)
        (exp (u) n))
     (sqrt 5)))

(define (exp x e)
  (exp-iter x e 1 1))

(define (exp-iter x e count product)
  (if (< e count)
      product
      (exp-iter x e (+ 1 count) (* product x))))

(define (sqrt x)
  (sqrt-iter 1.0 0.0 x))

(define (sqrt-iter guess last-guess x)
  (if (good-enough? last-guess guess)
      guess
      (sqrt-iter (improve guess x)
                 guess
                 x)))

(define (good-enough? guess last-guess)
  (< (abs (- guess last-guess)) 0.001))

(define (improve guess x)
  (average guess (/ x guess)))

(define (average x y)
  (/ (+ x y) 2))

(define (abs x)
  (if (< x 0)
      (- x)
      x))

(define (square x) (* x x))

Test:

> (fib 10)
55
> (proof 10)
55.000000000027384
>
Categorized as SICP Chapter 1, SICP Exercises