2017-10-13 75 views
0

我想做一個排序功能,排序3個或更少的元素的列表,但模式匹配令我困惑。如何對Haskell中的列表中的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] 

但一直收到這個錯誤

*主要> sort3 intCMP [1,1,1]

***異常:fun.hs:(7,1) - (12 ,23):功能排序3中的非窮舉模式

+0

爲什麼不使用'compare'而不是自定義的'intCMP'? – dfeuer

+0

你不需要使用'cmp',你可以直接寫'if a 4castle

回答

4

您認爲是最後一個子句,實際上是一個名爲sort(而不是sort3)的新函數。打開-Wall將幫助您注意到這種錯誤。

+0

我一直盯着這個2小時,感謝catch –

相關問題