Я полный новичок в Haskell. У меня есть список кортежей, которые я использую в Haskell: структура, как этот [(a,b),(c,d),(e,f),(g,h)]
Поиск максимального элемента в списке кортежей
То, что я хочу, чтобы вернуть максимальный элемент в этом наборе в соответствии со вторым значением: Таким образом, если список кортежей [(4,8),(9,10),(15,16),(10,4)]
, я хочу, чтобы максимальный элемент был (15,16)
.
Но я не знаю, как это сделать. Это моя попытка до сих пор,
maximum' :: (Ord a) => (Num a) => [(a,b)] -> a
maximum' [] = error "maximum of empty list"
maximum' [(x,y)] = -1
maximum' (x:xs)
| snd x > snd(xs !! maxTail) = 0
| otherwise = maxTail
where maxTail = maximum' xs + 1
И я получаю сообщение об ошибке, которое не имеет никакого смысла для меня:
newjo.hs:23:25:
Could not deduce (a ~ Int)
from the context (Ord a, Num a)
bound by the type signature for
maximum' :: (Ord a, Num a) => [(a, b)] -> a
at newjo.hs:19:14-47
`a' is a rigid type variable bound by
the type signature for maximum' :: (Ord a, Num a) => [(a, b)] -> a
at newjo.hs:19:14
In the second argument of `(!!)', namely `maxTail'
In the first argument of `snd', namely `(xs !! maxTail)'
In the second argument of `(>)', namely `snd (xs !! maxTail)'`
мне нужна помощь о том, как это сделать.
Спасибо. Мне нравится, что это лучший, но все другие решения были полезны. –