2016-09-26 2 views
0

Если у меня есть 2 списка списков в Haskell, как следующее:Haskell список списков умножение

[[1,1,1],[3,4,6],[1,2,3]] [[3,2,2],[3,4,5],[5,4,3]] 

я должен умножить первые списки, вторые списки, и так далее.

В приведенном выше примере должно привести к

[[3,2,2],[9,16,30],[5,8,9]] 

Это то, что я сделал:

multListt xss yss = [zipWith (*) xs ys | xs <- xss, ys <- yss] 

Мой результат:

[[3,2,2],[3,4,5],[5,4,3],[9,8,12],[9,16,30],[15,16,18],[3,4,6],[3,8,15], 
[5,8,9]] 

Это означает, что мой процесс занимает 1 элемент первого списка и умножает его на все элементы в списке 2 и т. д.

Можете ли вы предложить ключ к решению моей проблемы?

почтением,
Хорхе Мальдонадо

ответ

6

Используйте zipWith дважды.

multListt xss yss = zipWith (zipWith (*)) xss yss 
3

можно сделать с помощью двух вложенных вызовов zipWith как это:

zipWith (zipWith (*)) [[1,1,1],[3,4,6],[1,2,3]] [[3,2,2],[3,4,5],[5,4,3]] 

Или можно использовать parallalel списковых как то:

[zipWith (*) xs ys | xs <- [[1,1,1],[3,4,6],[1,2,3]] | ys <- [[3,2,2],[3,4,5],[5,4,3]]] 

Последнее решение требует расширения на ParallelListComp языка ,

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