Haskell“否则”模式匹配?

时间:2016-05-13 05:07:14

标签: haskell pattern-matching

我有以下代码:

swapInPairs :: [a] -> [a]
swapInPairs [] = []
swapInPairs [x] = [x]
swapInPairs (x:y:ys) = y : x : swapInPairs ys

有没有办法像

那样做
swapInPairs :: [a] -> [a]
swapInPairs (x:y:ys) = y : x : swapInPairs ys
otherwise = id

我知道这不是什么大不了的事,只能摆脱一行代码,但我很好奇是否有类似的东西用于模式匹配,因为警卫“否则”。

2 个答案:

答案 0 :(得分:7)

模式匹配通常会顺序应用。

因此,如果您在更具体的模式之后有一个'全能'版本,那么将会首先匹配更具体的模式,如果不可能,那么“全能”将会发挥作用

所以你可以做到

swapInPairs :: [a] -> [a]
swapInPairs (x:y:ys) = y : x : swapInPairs ys
swapInPairs x = x

答案 1 :(得分:3)

在模式匹配中证明了顺序问题,我不知道:

swapInPairs :: [a] -> [a]
swapInPairs (x:y:ys) = y : x : swapInPairs ys
swapInPairs x = x

作品。