www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

chrisslater

Gepostet:
21.11.2008 17:18

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    
 
Siracusa

Gepostet:
21.11.2008 19:52

   
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