Anwenden von putStr auf jedes Element einer Liste

8

Ich versuche, eine Liste von ganzen Zahlen in diesem Format auszudrucken

%Vor%

Also nimmt meine Funktion eine Liste von ganzen Zahlen und gibt ein IO () wie folgt zurück:

%Vor%

Aber ghc gibt mir den Fehler:

%Vor%

Nun verstehe ich, dass die Funktion durch die Liste laufen würde, wobei zuerst das erste Element 'x' und dann: printVector xs den Rest der Liste rekursiv aufrufen würde, indem für jedes Element dieselbe putStr-Funktion angewendet wird die Liste.

Aber ich denke, mein Problem ist, wo ich tue: printVector xs? Kann jemand darauf hinweisen, was ich hier falsch mache?

    
Donna 16.03.2013, 14:29
quelle

1 Antwort

14

Sie müssen die Liste überlisten, aber da es sich um IO-Aktionen handelt, müssen Sie sie ebenfalls ausführen (da map eine Liste von IO-Aktionen zurückgibt, ohne sie auszuführen, siehe folgendes Beispiel).

%Vor%

Es gibt bereits eine Funktion, es ist mapM . So kann das Beispiel vereinfachen als:

%Vor%

Sie können auch mapM_ verwenden, das stattdessen sequence_ verwendet, und das Ergebnis der Ausführung der IO-Aktion für jedes der Elemente ignorieren. Daher ist der Rückgabetyp IO () anstelle von IO [()] (vorheriges Beispiel).

%Vor%     
thoferon 16.03.2013, 14:41
quelle

Tags und Links