Gepostet: |
die Funktion nub | ||||||||||
nub l = nub' l [] where nub' [] _ = [] nub' (x:xs) ls | x `elem` ls = nub' xs ls | otherwise = x : nub' xs (x:ls) entnommen aus List.hs Das ist der Quelltext der Funktion nub. Ich weiß zwar das mit Hilfe dieser Funktion alle doppelten Elemente einer Liste gelöscht werden, hab aber keine Ahnung was bei dem Programm tatsächlich passiert. Deshalb wollte ich wissen ob mir jemand den Quelltext erklären könnte. Am besten was genau in jeder Zeile passiert. Danke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, mach ich doch glatt! :-) Hilfreich ist hier zu wissen, daß bei der Hilfsfunktion nub' der erste Parameter die Originalliste ist und der zweite eine Hilfsliste, die sich alle Elemente merkt, die schonmal in der Originalliste aufgetaucht sind. > nub l = nub' l [] Ruft einfach die Hilfsfunktion mit der Originalliste und leerer Hilfsliste auf. > nub' [] _ = [] Die Definition für den Fall, daß die erste Liste leer ist (der zweite Parameter ist egal). > nub' (x:xs) ls Der Fall, daß die erste Liste mindestens ein Element enthält. > | x `elem` ls = nub' xs ls Wenn das erste Element in der zweiten Liste ist, also schonmal in der Originalliste aufgetaucht ist, dann ignoriere es und mache mit der Restliste weiter. > | otherwise = x : nub' xs (x:ls) Wenn das erste Element nicht in der zweiten Liste ist, also zum ersten Mal in der Originalliste auftaucht, dann füge es an die Ergebnisliste an und kopiere es auf die Hilfsliste. Es hilft auch immer, einen Aufruf der Funktion mal Schritt für Schritt an einem kleinen Beispiel durchzurechnen. Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||