2017-02-02 6 views
1

私はタプル(私の場合、タプル内の3つのInt値)のリストを取る関数を記述しようとしていて、リストのいずれかのタプルの最大合計を返します。ハスケルのタプルのリストとパターンマッチングをどのように使いますか?

これは、そうすることで私の現在の試みです:

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 

をしかし、私はこの関数を実行するたびに、私は私のエラー出力で終わる... Haskellは空としてタプルの私の入力リストを扱っていますリストに入っているか、私の「そうでなければ」ガードでリストの終わりまでサイクリングして、エラーに達していますか?

+1

'sumTotal'の型を'(Int、Int、Int) - > Int'に変更すると、 'maxTotal = maximum。 fmap sumTriple'である。 – chepner

答えて

2

maxTotalに関する私の定義は不完全であった。私が加えなければならなかったのは次のとおりでした:

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

ケースが閉じました。

+0

あなたのアルゴリズムははっきりしていないようです。なぜあなたは 'sumTriple'を必要としますか? –

+0

それを必要とせず、上記の行を追加した後で省略しました – rafro4

関連する問題