Haskell Pattern Matching auf Strings - Warum funktioniert das nicht?

9
%Vor%

Das erwartete Ergebnis des Mustervergleichs in diesem Code ist, dass alles vor dem ersten Doppelpunkt get x zugewiesen wird, und alles danach wird xs zugewiesen, was das Ergebnis ist. Wenn kein Doppelpunkt vorhanden ist, wird nichts zurückgegeben.

Was tatsächlich mit einem Beispielstring passiert, den ich benutze ("PING: gibson.freenode.net" - es ist Teil eines IRC-Clients) ist, dass ich den leeren Rückgabewert bekomme.

Was mache ich hier falsch?

    
Macha 05.09.2010, 12:59
quelle

2 Antworten

16

Das Muster x:':':xs bedeutet "Das erste Zeichen ist x , das zweite Zeichen ist ':' die restlichen Zeichen sind in der Liste xs ". Das bedeutet also, dass der Typ von x Char ist, nicht [Char] und dass das Muster nur dann übereinstimmt, wenn vor dem Doppelpunkt genau ein Zeichen steht.

Es gibt keine Möglichkeit, den Musterabgleich in Listen zu verwenden, um zu sagen "Übereinstimmung mit einer Unterliste, gefolgt von einem Element, gefolgt von der verbleibenden Liste".

Um den Teilstring nach dem ersten Doppelpunkt zu erhalten, können Sie dropWhile (/= ':') theString verwenden. Dies schließt den Doppelpunkt ein. Verwenden Sie daher tail oder den Mustervergleich, um ihn zu entfernen.

    
sepp2k 05.09.2010, 13:02
quelle
4

Der Operator : fügt ein -Element in den Kopf einer Liste ein. Ihr Muster entspricht nur einer Zeichenfolge, bei der der Doppelpunkt das zweite Element in der Liste ist.

    
Greg Sexton 05.09.2010 13:03
quelle

Tags und Links