SCIP 1.19

Exercise 1.19.
(defun squre(x)
  (* x x))


(defun even?(x)
  (= (mod x 2) 0))


(defun doublef(x)
  (+ x x))


(defun half(x)
  (/ x 2))


(defun fib(n)
  (fib-iter 1 0 0 1 n))

(defun fib-iter(a b p q count)
  (cond ( (= count 0) b)
	( (even? count) (fib-iter a
				  b
				  (+ (* p p) (* q q))
				  (+ (* 2 p q) (* q q))
				  (/ count 2)))
	( (fib-iter (+ (* b q) (* a q) (* a p))
		    (+ (* b p) (* a q))
		    p
		    q
		    (- count 1)))))


  
Edit in Emacs with Slime and Steel Bank Common Lisp.