Filterliste von Tupeln

7

Neu bei Haskell und ein Stolperstein. Ich versuche, eine Liste von Tupeln basierend auf dem ersten Element zu filtern.

%Vor%

Ich bekomme einen illegalen '_' Fehler, aber ich bin mir nicht sicher, wie ich es umgehen kann?

    
Zippy 24.10.2009, 16:33
quelle

2 Antworten

19

In Haskell können Sie nicht wie bei einer Liste über ein Tupel iterieren.

Wenn das Tupel nur zwei Elemente enthält, können Sie mit fst das erste Element des Tupels und mit snd das zweite Element abrufen.

Eine Möglichkeit zu tun, was ich denke, dass Sie tun möchten, ist dieser Ansatz:

%Vor%

Gibt nur die Elemente in der Liste zurück, in denen das erste Element gleich 1 ist; natürlich können Sie x ersetzen, wo ich 1 setzen.

Um etwas genauer zu sein: (==1).fst wendet zuerst fst auf das Element in lst an und wendet dann (==1) auf das Ergebnis von fst an - technisch ist der Punkt zusammengesetzt die zwei Funktionen zusammen.

    
Mark Rushakoff 24.10.2009, 16:40
quelle
5

Sie können kein Argument mit einem Platzhalter _ an den Operator == (oder an eine andere Funktion) übergeben. Das Argument muss ein realer Wert sein, nicht ein Muster, mit dem verglichen werden soll.

Wenn Sie Mustervergleiche verwenden möchten, können Sie eine Lambda-Funktion als filter condition:

verwenden %Vor%

Außerdem gibt es die vordefinierte Funktion fst um das erste Element eines Zwei-Element-Tupels zu extrahieren. Dies kann mit == kombiniert werden, um denselben Test durchzuführen:

%Vor%     
sth 24.10.2009 20:59
quelle

Tags und Links