(Wie Sie wahrscheinlich wissen) iterate
ist eine Funktion, die eine Funktion und einen Startwert übernimmt. Dann wendet es die Funktion auf den Startwert an, wendet dann die gleiche Funktion auf das letzte Ergebnis an und so weiter.
Das Ergebnis ist eine unendliche Liste. (Deshalb verwende ich take
).
Meine Frage, wie würden Sie Ihre eigene iterate'
-Funktion in Haskell implementieren und nur die Grundlagen ( (:)
(++)
lambdas, Pattern-Mataching, Wächter, etc.) verwenden?
(Haskell Anfänger hier)
Nun, iterate erstellt eine unendliche Liste von Werten a erhöht um f . Ich würde also damit beginnen, eine Funktion zu schreiben, die einen Wert a vor die Liste stellt, die durch rekursives Aufrufen von iterate mit f a erstellt wurde:
%Vor%Dank der Lazy-Evaluierung wird nur der Teil der konstruierten Liste ausgewertet, der zur Berechnung des Wertes meiner Funktion erforderlich ist.
Beachten Sie auch, dass Sie im Standard-Prelude kurze Definitionen für die grundlegenden Haskell-Funktionen finden >.
Das Lesen dieser Liste von einfachen Definitionen, die im Grunde eine umfangreiche Bibliothek aus rohen Primitiven bootstrapsen, kann sehr lehrreich und augenöffnend sein, um ein Fenster auf den "Haskell-Weg" zu geben.
Ich erinnere mich an einen sehr frühen Aha-Moment beim Lesen: data Bool = False | True
.
Tags und Links haskell loops combinators