;;; mejja plays with let-values and dijkstras fib: ;;; www.cs.utexas.edu/users/EWD/ewd06xx/EWD654.PDF (define (fib n) ;fantastic? (if (< 0 n) (let-values (((a b) (fib (quotient n 2)))) (let ((c (* (- (* 2 b) a) a)) (d (+ (* b b) (* a a)))) (if (= 0 (remainder n 2)) (values c d) (values d (+ c d))))) (values 0 1))) (define (fib n) ;using let*-values ;; assumption: (div n d) => (values q r) (if (< 0 n) (let*-values (((q r) (div n 2)) ((a b) (fib q))) (let ((c (* a (- (* 2 b) a))) (d (+ (* a a) (* b b)))) (if (= r 0) (values c d) (values d (+ c d))))) (values 0 1)))