У меня есть кортеж, содержащий два списка чисел - ([1,2,3,4], [5,6,7,8])Суммирование соответствующие пары из двух списков в кортеже - в Haskell
Мне нужно суммировать соответствующие пары чисел из каждого списка. т.е. (1 + 5), (2 + 6) и т. д. Вывод списка, т. е. [6,8,10,12]. Он также должен работать для любого количества элементов в списках (2 списка из 5, 2 списка из 6 и т. Д.).
Я пытаюсь использовать функцию, используя «map sum. Transpose», но, похоже, не может получить правильные типы (как внутри кортежа). Я нашел фрагмент кода, который работает для списка списков, но не знаю, как сделать то же самое для кортежей списков (возможно ли это?). Когда я пытаюсь изменить типы «a» или использовать компиляцию Int I для ошибок типа-несоответствия.
tupSums :: Num a => [[a]] -> [a]
tupSums = map sum . transpose
Я довольно новый для использования Haskell, так что я не совсем понимаю, ошибок я получаю, извините, если вопрос кажется глупым.
Cheers Kevin, это отличная помощь. В основном у меня возникают проблемы с различиями между [a] и [Int], которые вызывают несоответствия типов, когда я выполняю функции. – Worlt
+1, спасибо, что указали мою ошибку. – dreamcrash
@Worlt: 'Int' - это конкретный тип, представляющий целое число. Он также относится к классу «Num», поэтому в любом месте, где ожидается «Num», вы можете использовать 'Int'. Поэтому в типе 'Num a => ([a], [a]) -> [a]' вы можете передать '([Int], [Int])', и вы получите '[Int ] 'назад. Единственное ограничение здесь - конкретный тип всех 3 списков, которые должны быть одинаковыми. Вы не можете передать '([Int], [Integer])', и если вы передадите '([Int], [Int])', вы не сможете получить '[Integer]' back out. –