我刚刚开始学习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)