繁体   English   中英

Haskell“否则”模式匹配?

[英]Haskell “otherwise” pattern match?

我有以下代码:

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

我知道这并不是什么大不了的事,只摆脱了一行代码,但是我很好奇模式匹配是否存在这样的东西,因为后卫有“否则”的感觉。

模式匹配通常是顺序应用的。

因此,如果您使用更具体的模式拥有一个“包罗万象”的版本,则会首先匹配更具体的模式,并且如果不可能,那么“包罗万象”将完成它的工作。

所以你可以做

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

原来模式匹配中的顺序很重要,我不知道:

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

作品。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM