2017-02-02 39 views
1

我一直在試圖編寫一個函數,它接受一個元組列表(在我的例子中,元組中的三個Int值)並返回列表中任何元組的最大總和。你如何使用Haskell中的元組列表進行模式匹配?

這是我這樣做當前的嘗試:

type Triples = [(Int, Int, Int)] 
maxTotal :: Triples -> Int 
maxTotal [] = error "ERROR: NO TUPLES" 
maxTotal ((x,y,z):rest) 
    | sumTriple x y z > maxTotal rest = sumTriple x y z 
    | otherwise = maxTotal rest 

sumTriple :: Int -> Int -> Int -> Int 
sumTriple x y z = x + y + z 

不過,我每次運行這個功能的時候,我結束了我的錯誤輸出...是哈斯克爾治療的元組我的輸入列表爲空名單還是我騎自行車到我的「其他」後衛列表的末尾,然後到達錯誤?

+1

如果您將'sumTotal'的類型更改爲'(Int,Int,Int) - > Int',那麼'maxTotal = maximum。 fmap sumTriple'。 – chepner

回答

2

原來我對maxTotal的定義不完整。所有我不得不補充的是:

maxTotal [(x,y,z)] = x + y + z 

案件關閉。

+0

你的算法似乎並不清楚。你爲什麼需要'sumTriple'? –

+0

不需要它,我在添加上面的行後省略了它 – rafro4