(define (reduce func lst init) (if (null? lst) init (reduce func (cdr lst) (func init (car lst))))) (define (fib n) (define (fib1 n1 n2 k) (if (= k n) n2 (fib1 n2 (+ n1 n2) (+ k 1)))) (if (= n 0) 0 (fib1 0 1 1)))