#
Accumulation
^{
}

a. Show that
`sum`

and
`product`

(exercise
1.31
) are both special cases of a still more general notion called accumulate that combines a collection of terms, using some general accumulation function:

```
(accumulate combiner null-value term a next b)
```

`Accumulate`

takes as arguments the same term and range specifications as
`sum`

and
`product`

, together with a
`combiner`

procedure (of two arguments) that specifies how the current term is to be combined with the accumulation of the preceding terms and a
`null-value`

that specifies what base value to use when the terms run out. Write
`accumulate`

and show how
`sum`

and
`product`

can both be defined as simple calls to
`accumulate`

.

b. If your
`accumulate`

procedure generates a recursive process, write one that generates an iterative process. If it generates an iterative process, write one that generates a recursive process.