Ich habe gerade angefangen, Haskell zu lernen, und ich versuche Mustervergleiche zu verwenden, um eine Liste mit genau 2 Elementen zu finden. Als Übung versuche ich eine Funktion zu schreiben, die das eine aber letzte Element aus einer Liste zurückgibt. Bisher fand ich dies:Muster-Match-Liste mit genau 2 Elementen in Haskell
myButLast :: [a] -> a
myButLast [] = error "Cannot take one but last from empty list!"
myButLast [x] = error "Cannot take one but last from list with only one element!"
myButLast [x:y] = x
myButLast (x:xs) = myButLast xs
Nun ist die Linie mit myButLast [x: y] ist eindeutig falsch, aber ich weiß nicht, wie eine Liste übereinstimmen, die genau 2 Elemente hat, wie das ist, was ich Ich versuche es dort zu tun. Ich lese diese (http://learnyouahaskell.com/syntax-in-functions#pattern-matching) Seite und es hat mir sehr geholfen, aber ich bin nicht ganz dort noch ...
Sie können entweder '[x, y]' oder 'x: y: []' schreiben. Sie sind beide gleichwertig. Das Muster '[x: y]' bedeutet "finde eine Liste, die genau ein Element enthält, das selbst eine Liste ist, die genau zwei Elemente enthält, die' x' und 'y'" genannt werden, was nicht gemeint ist. – MathematicalOrchid
@ MathematicalOrchid Oh, ich verstehe. Vielen Dank! –
Eigentlich nein, das ist falsch ... '[x: y]' bedeutet 'x' ist das erste Element und' y' ist die verbleibende Unterliste. (Denk '[x: xs]'.) Sorry, dass ... Wie auch immer, es ist nicht das, was du meintest. – MathematicalOrchid