SICP Practice

Practice 4.21

a Fibonacci

(define (fibonacci n)
  ((lambda (x)
     ((lambda (fib)
        (fib fib x))
      (lambda (fb k)
        (cond ((= k 0) 0)
              ((= k 1) 1)
              (else
               (+ (fb fb (- k 1))
                  (fb fb (- k 2))))))))
   n))

b f

(define (f x)
  ((lambda (even? odd?)
     (even? even? odd? x))
   (lambda (ev? od? n)
     (if (= n 0)
         true
         (od? ev? od? (- n 1))))
   (lambda (ev? od? n)
     (if (= n 0)
         false
         (ev? ev? od? (- n 1))))))