2016-09-26 3 views
0

를 곱셈.하스켈 목록

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 개 요소를 취한다는 것을 의미

위의 예는이 내가 한 일이다

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

발생한다 그것을리스트 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 언어 확장을 필요로 .