如何在Haskell的列表中排序3个项目?

时间:2017-10-13 23:35:52

标签: haskell pattern-matching

我试图制作一个排序函数,对3个或更少元素的列表进行排序,但模式匹配让我感到困惑。

intCMP :: Int -> Int -> Ordering
intCMP a b | a == b =EQ
           | a < b = LT
           | otherwise = GT

 sort3 :: Ord a => (a -> a -> Ordering) -> [a] -> [a]
 sort3 _ [] = []
 sort3 _ [a] = [a]
 sort3 cmp [a,b] = if cmp a b == LT then
                    [a,b]
                   else
                   [b,a]
 sort cmp [a,b,c] = [a,b,c]

但我一直收到此错误

*主&GT; sort3 intCMP [1,1,1]

***异常:fun.hs:(7,1) - (12,23):函数sort3中的非详尽模式

1 个答案:

答案 0 :(得分:4)

你认为你的最后一个子句实际上是一个名为sort3的新函数(而不是-Wall)。启用{{1}}会帮助您发现此类错误。