4.29 Exercise 4.29

A simple program that performs much more slowly without memoization:

(define (fib n)
  (cond ((= n 0) 1)
        ((= n 1) 1)
        (else (+ (fib (- n 1)) (fib (- n 2))))))
 
(define (square x) (* x x))
 
(square (fib 10))

Now consider the following program:

(define count 0)
 
(define (id x)
  (set! count (+ count 1))
  x)
 
(define (square x) (* x x))
 
(square (id 10))
 
count

With memoization, the result is 1(id 10) gets evaluated, and increments count, only once, even though square references its value twice. However, without memoization, count is actually 2, because x is referenced by name twice in the body of square.