2016-09-26 6 views
0

Wenn ich zwei Listen von Listen in Haskell wie folgt aus:Haskell Liste von Listen Multiplikation

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

Ich muss die ersten Listen, zweite Listen multiplizieren, und so weiter.

Das obige Beispiel sollte

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

Dies ist, was ich getan habe in

Folge:

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

Mein Ergebnis ist:

[[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]] 

Das bedeutet, dass mein Verfahren 1 Element nimmt der ersten Liste und multipliziert es mit allen Elementen in Liste 2 und so weiter.

Können Sie mir bitte einen Hinweis geben, um mein Problem zu lösen?

Hochachtungsvoll,
Jorge Maldonado

Antwort

6

Verwenden zipWith zweimal.

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

Sie können zipWith wie dies mit Hilfe von zwei verschachtelten Anrufe tun:

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

Oder kann parallalel Listenkomprehensionen so verwenden:

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

Die letzte Lösung erfordert die ParallelListComp Spracherweiterung .

Verwandte Themen