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

时间:2016-02-13 10:47:52

标签: 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

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

1 个答案:

答案 0 :(得分:17)

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

这是99 questions中的第二个问题。