SICP - Warum mit Akkumulieren akkumulieren, wenn der Filter bereits eine Liste zurückgibt?

8

In Abschnitt 2.2.3 der SICP 2nd Edition haben die Autoren den folgenden Code:

(define (even-fibs n)
  (accumulate cons
              nil
              (filter even?
                      (map fib
                           (enumerate-interval 0 n)))))

Meine Frage ist, warum sie in diesem Fall akkumulieren ? Könnten sie nicht die gleiche Antwort vom Filter erhalten haben, ohne akkumulieren zu verwenden ?

RAbraham
quelle

Antworten:

10

In diesem Abschnitt des Buches, filter, map, und enumerate-intervalsind , vermutet Sequenzen zurückzukehren, die aus Listen konzeptionell verschieden sind. Sie können Sequenzen beispielsweise mithilfe von Streams implementieren, obwohl Sie Sequenzen auch mithilfe von Listen implementieren können.

In diesem Fall besteht das accumulatewith consdarin, die Sequenz in eine Liste zu konvertieren.

Chris Jester-Young
quelle