Ho appena iniziato ad imparare Haskell e sto cercando di utilizzare la corrispondenza del modello per abbinare una lista che ha esattamente 2 elementi. Come esercizio, sto provando a scrivere una funzione che restituisce l'ultimo elemento da una lista. Finora ho trovato questo:Elenco di corrispondenze con esattamente 2 elementi 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
Ora la linea con myButLast [x: y] è chiaramente errato, ma non so come abbinare una lista che ha esattamente 2 elementi, come è quello che ho' sto cercando di fare lì. Ho letto questo (http://learnyouahaskell.com/syntax-in-functions#pattern-matching) pagina e mi ha aiutato molto, ma non sono del tutto ancora arrivati ...
Si può scrivere '[x, y]' o 'x: y: []'. Sono entrambi equivalenti. Il modello '[x: y]' significa "abbina una lista che contiene esattamente un elemento, che è esso stesso una lista, che contiene esattamente due elementi chiamati' x' e 'y'", che non è quello che intendevi. – MathematicalOrchid
@MathematicalOrchid Oh, capisco. Grazie mille! –
In realtà, no, è sbagliato ... '[x: y]' significa che 'x' è il primo elemento e' y' è la sottolista rimanente. (Pensa '[x: xs]'.) Scusa per quello ... In ogni caso, non è quello che intendevi. – MathematicalOrchid