In SICP 2nd Edition section 2.2.3,
the authors have the following code:
(define (even-fibs n)
(accumulate cons
nil
(filter even?
(map fib
(enumerate-interval 0 n)))))
My question is why did they use accumulate in this case? Couldn’t they have got the same answer from filter without using accumulate?
In that section of the book, filter
, map
, and enumerate-interval
are presumed to return sequences, which are conceptually distinct from lists. You can implement sequences using streams, for example, though you can implement sequences using lists too.
So, in this case, the accumulate
with cons
is to convert the sequence to a list.