www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

XeZZ

Gepostet:
30.03.2010 23:42

zipWith warum doppelt?  
Hiho,

hier nen Beispiel, dass ich grade nicht so ganz nachvollziehn kann.


ghci> zipWith (zipWith (*)) [[1,2,3],[3,5,6],[2,3,4]] [[3,2,2],[3,4,5],[5,4,3]]
[[3,4,6],[9,20,30],[10,12,12]]


Warum muss das doppelt sein? Also das es an der geschachtelten Liste liegt, dass man das zipWith doppelt braucht ist klar aber ich komm irgendwie nicht drauf warum das so sein muss.
Zum Seitenanfang ICQ    
 
Brewer

Gepostet:
31.03.2010 10:52

   
Du schreibst es doch schon, wegen der Schachtelung braucht man zweimal zipWith.
Das erste zipWith wendet die Funktion (zipWith (*)) auf den Inhalt der beiden Listen an. Und das passiert dabei:

Es wird das erste Element der zwei Listen auf zipWith (*) angewendet:
> zipWith (*) [1,2,3] [3,2,2] -> [3,4,6]

Genauso das zweite und dritte Element:
> zipWith (*) [1,2,3] [3,2,2] -> [9,20,30]
> zipWith (*) [1,2,3] [3,2,2] -> [10,12,12]


Das erste zipWith hat nun die Funktion auf den Inhalt der beiden Listen angewendet. Als Ergebnis sind die 3 Listen oben rausgekommen. Nun wird zipWith seinem Namen noch gerecht und verbindet die Ergebnise miteinander zu einer neuen Liste, dem Endergebnis:
-> [[3,4,6],[9,20,30],[10,12,12]]

Um es nochmal anschaulich zu machen, dort passiert einfach folgendes:
[zipWith (*) [1,2,3] [3,2,2]] ++ [zipWith (*) [3,5,6] [3,4,5]] ++ [zipWith (*) [2,3,4] [5,4,3]]

Brewer
Zum Seitenanfang