Betrachten Sie Folgendes:
%Vor%Lass es uns einfach in Stücke schneiden:
%Vor%Jetzt haben wir diese Reihe von Funktionen, lassen Sie uns sie zusammenstellen:
%Vor% ((.), id)
es ist Endo
monoid, also
Für die linke Falte brauchen wir nur Dual
monoid.
(<>) = (:)
und seed = []
Oder einfach:
%Vor%Grundsätzlich müssen Sie 1: 2: 3: [] in (3:). (2:). (1 :) umwandeln und auf [] anwenden. Also:
%Vor%Die Bedeutung des akkumulierten g ist hier, dass es auf sein Argument einwirkt, indem es den umgekehrten partiellen Schwanz von xs an ihn anfügt.
Für das Beispiel 1: 2: 3: [] wird im letzten Schritt x 3 und g wird (2:). (1:).
alte Frage, ich weiß, aber gibt es etwas nicht optimal bei diesem Ansatz, es scheint, als wäre foldr aufgrund der faulen Bewertung schneller und der Code ist ziemlich knapp:
%Vor%ist (++) deutlich langsamer als (:), was einige logische Wendungen erfordert, wie in FUZxxls Antwort
gezeigtTags und Links haskell