SICP Exercise 3.1

Question

An accumulator is a procedure that is called repeatedly with a single numeric argument and accumulates its arguments into a sum. Each time it is called, it returns the currently accumulated sum. Write a procedure make-accumulator that generates accumulators, each maintaining an independent sum. The input to make-accumulator should specify the initial value of the sum; for example

(define A (make-accumulator 5))

(A 10)
15

(A 10)
25

Answer

We are using init as a state variable to act as the accumulator, and add as the variable to be added.

(define (make-accumulator init)
  (λ (add)
    (begin (set! init (+ init add))
           init)))

Let’s test it:

(define A (make-accumulator 5))

(A 10)
(A 10)

Answer:

15
25