Frage

In Struktur und Interpretation von Computerprogrammen (SICP) Abschnitt 2.2.3 mehrere Funktionen definiert werden mit:

(accumulate cons nil 
  (filter pred
         (map op sequence)))

Zwei Beispiele, die nutzen diese arbeiten auf einer Liste der Fibonacci-Zahlen, even-fibs und list-fib-squares.

Die accumulate, Filter- und Kartenfunktionen sind in Abschnitt 2.2 als auch definiert. Der Teil, den ich ist verwirrend ist, warum die Autoren die accumulate hier eingeschlossen. accumulate nimmt 3 Parameter:

  • Eine binäre Funktion angewendet werden soll

  • Ein Anfangswert, wie der am weitesten rechts liegenden Parameter an die Funktion verwendet

  • Eine Liste, auf die die Funktion

  • angewendet wird

Ein Beispiel für accumulate auf eine Liste der Anwendung der Definition in dem Buch mit:

    (accumulate cons nil (list 1 2 3))
    => (cons 1 (cons 2 (cons 3 nil)))
    => (1 2 3)

Da der dritte Parameter ist eine Liste, (accumulate cons nil some-list) wird nur some-list zurückkehren, und in diesem Fall ist das Ergebnis von (filter pred (map op sequence)) ist eine Liste.

Gibt es einen Grund für diese Verwendung von accumulate andere als die Übereinstimmung mit anderen ähnlich strukturierten Funktionen im Abschnitt?

War es hilfreich?

Lösung

Ich bin sicher, dass diese beiden Verwendungen von accumulate sind lediglich illustrativ für die Tatsache, dass „consing Elemente eine Liste zu konstruieren“ kann als ein akkumulativen Prozess in der gleichen Weise behandelt wird, dass „Zahlen multipliziert ein Produkt zu erhalten“ oder " Summieren Zahlen insgesamt“kann zu erhalten. Sie haben Recht, dass die Akkumulation ist effektiv eine no-op.

(abgesehen. Beachten Sie, dass dies offensichtlich ein nützlicher Betrieb, wenn die Ausgabe von filter und Eingabe von accumulate keine Liste war sein könnte, zum Beispiel, wenn es eine träge erzeugte Sequenz dargestellt)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top