Sie denken immer noch prozesstechnisch. Versuchen Sie, eher in Listen als in Schleifen zu denken.
Dann, was Sie wollen, ist eine Liste wie folgt aus: [1,f(1),2,f(2),3,f(3)...,n,f(n)]
Hier map
das Bild eintritt. Wenn Sie eine Funktion f
hatten und diese auf eine Liste [1,2,3...,n]
anwenden wollten, verwenden Sie map f [1..n]
.
Was Sie wollen, ist eine Funktion, die eine Zahl nimmt i
und wendet eine Funktion f
darauf, antwortet dann mit [i,f(i)]
oder vielleicht ein Tupel (i,f(i))
. Sie erstellen diese Funktion und ordnen sie Ihrer Liste zu.
Und natürlich müssen Sie diese erste Liste erstellen, um auf - diese Liste von [1..n] zu arbeiten.
Ein weiterer Ansatz ist es, eine Liste Verständnis zu verwenden:
forloop n = [(x,f x)|x <- [1..n] ]
(Anmerkung: Ich habe keinen Haskell Compiler mit mir jetzt, also muss ich später den letzten Teil überprüfen ich glaube, es sollte wie vorgestellt arbeiten.).
So können Sie eine Funktion vom Typ wollen '[etwas] -> IO()', im Wesentlichen? Das wäre 'mapM_ print' nach' import Control.Monad'. – AJFarmar