我有以下代码:
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
我知道这不是什么大不了的事,只能摆脱一行代码,但我很好奇是否有类似的东西用于模式匹配,因为警卫“否则”。
答案 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
作品。