(define (fib n)
(cond ((= n 0) 0)
((= n 1) 1)
(else (+ (fib (- n 1))
(fib (- n 2))))))
9227465
(define (memorize f)
(let ((table (make-table)))
(let ((get (table 'lookup-proc))
(put (table 'insert-proc!)))
(lambda (x)
(let ((previously-computed-result (get (list x))))
(or previously-computed-result
(let ((result (f x)))
(put (list x) result)
result)))))))
(define memo-fib
(memorize (lambda (n)
(cond ((= n 0) 0)
((= n 1) 1)
(else (+ (memo-fib (- n 1))
(memo-fib (- n 2))))))))
9227465
(define memo-fib
(memorize fib))
(define fib
(memorize fib))