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