Wie würden Sie Iterate in Haskell (neu) implementieren?

8
%Vor%

(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.

%Vor%

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)

    
Andrei Ciobanu 22.09.2010, 13:34
quelle

2 Antworten

22

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.

    
danportin 22.09.2010, 13:42
quelle
12

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 .

    
sclv 22.09.2010 14:46
quelle

Tags und Links