2017-02-02 4 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 

Однако каждый раз, когда я запускаю эту функцию, я в конечном итоге с моей вывод ошибок ... Есть Haskell обработка моего списка ввода кортежей, как пустые список или я еду на велосипеде до конца списка в моем «в противном случае», а затем доходит до ошибки?

+1

Если вы измените тип 'sumTotal' на' (Int, Int, Int) -> Int', тогда 'maxTotal = максимум. fmap sumTriple'. – chepner

ответ

2

Оказывается, мои определения maxTotal были неполными. Все, что я должен был добавить, было следующее:

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

Корпус закрыт.

+0

Ваш алгоритм кажется непонятным. Зачем вам 'sumTriple'? –

+0

Не нужно, я опустил его после того, как я добавил вышеприведенную строку – rafro4

 Смежные вопросы

  • Нет связанных вопросов^_^