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?
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.
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.
Tags und Links haskell pattern-matching