模式匹配列表,正好在Haskell中有2个元素

13 haskell pattern-matching

我刚刚开始学习Haskell,我正在尝试使用模式匹配来匹配具有正好2个元素的列表.作为练习,我正在尝试编写一个函数,该函数返回列表中的一个但最后一个元素.到目前为止我发现了这个:

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
Run Code Online (Sandbox Code Playgroud)

现在使用myButLast [x:y]的行显然不正确,但我不知道如何匹配具有正好2个元素的列表,因为这就是我正在尝试做的事情.我读了这篇文章(http://learnyouahaskell.com/syntax-in-functions#pattern-matching)这对我帮助很大,但我还没完全到那里......

Kam*_*mel 19

myButLast :: [a] -> a
myButLast [] = error "empty list"
myButLast [x] = error "too few elements"
myButLast [x, _] = x
myButLast (x: xs) = myButLast xs
Run Code Online (Sandbox Code Playgroud)

这是99个问题中的第二个问题.