Wie ordnen Sie eine Funktion zum Bearbeiten von Listen in einer Liste zu? Das Folgende ist genau das, was ich als Beispiel versuche, aber ich wollte nur eine allgemeine Frage stellen. Vielen Dank im Voraus!
Im Moment versuche ich, eine Funktion auf jeder Liste einer Liste (von itrCol xs zurückgegeben) zu ändern.
%Vor%Dabei gibt itrCol eine Liste von Listen zurück, wobei jede Liste eine Spalte ist.
%Vor%getCol listet die Spaltenliste der Spaltenindizes auf
%Vor%und ändern ist:
%Vor%Könnte nur currying und einen anderen Aufruf zum Zuordnen verwenden.
%Vor%Um mehr über Currying zu erfahren, werfen Sie einen Blick auf das Kapitel in Learn You A Haskell , ein großartiges Beispiel Anfängerbuch in Haskell.
map
(und fmap
wichtiger) hebt im Grunde eine Funktion auf, um auf Listen zu arbeiten, und gibt Ihnen eine neue Funktion: (Ich habe überflüssige Parens hinzugefügt, um es klarer zu machen)
Wenn Sie diese zweite Funktion ([a] -> [b])
zuordnen, erhalten Sie eine Funktion, die auf Listen von Listen funktioniert:
(Wenn dies nicht das ist, was Sie wollten, dann erklären Sie bitte)
Die Typensignatur von map
ist:
Eine sinnvolle Signatur für change
ist:
Jetzt erwartet map
eine Funktion von a
bis b
als erstes Argument. Wenn wir change
angeben, eine Funktion von [Integer]
bis [Integer]
, dann a = [Integer]
und b = [Integer]
.
Wenn nun das von iterCol xs
erzeugte Listenverständnis [[Integer]]
liefert, dann können wir das auf map change
anwenden:
Das sieht alles gut für mich aus. Es funktioniert, weil map
polymorph ist. Wenn Sie ihm eine Funktion geben, die A in B umwandelt, gibt es Ihnen eine Funktion zurück, die Listen von A in Listen von B verwandelt. Es ist egal, was A und B sind: Wie Sie hier sehen können, können sie sogar selbst Listen sein!