Gepostet: |
Sublist | ||||||||||
Hey @ all... Ich habe folgendes Anliegen.. Ich soll ein Haskell Programm schreiben, dass aus einer Liste von Elementen folgendes wieder gibt : Bsp. sublist [1,2,3,4] soll [[] [1] [1,2] [1,2,3] [1,2,3,4] ergeben.. nur habe ich gar keine Idee.. wie ich das machen soll.. könnt ihr ihr mir helfen ? ist wirklich wichtig. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, die Aufgabe ist nicht schwer, hier mal ein Lösungsansatz: Es gibt erstmal zwei Fälle, die unterschieden werden müssen. Ist die Eingabeliste cs leer, so wird als Ergebnis eine Liste zurückgegeben, die nur eine leere Liste enthält. Ist cs nicht leer, dann gibst du eine Liste zurück, die selbst cs enthält und du berechnest rekursiv das Ergebnis von sublist ds, wobei ds die Liste cs ist, von der das letzte Element entfernt wurde (Dazu gibt es die Funktion init). An das rekursiv berechnete Ergebnis fügst du vorne einfach cs an. Beim Aufruf sollte dann sowas passieren: sublist [1,2,3] Zum Schluss kannst du die Liste mit reverse noch umdrehen. Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
hab die gleiche aufgabe und bekomms auch nicht hin--... das sind 2 verschieden ansätze (nur für winhugs zum testen als komentar gemacht) sublists :: [Int] -> [[Int]] |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hey danke erstmal.. ich schäme mich fast dafür diese Frage gestellt zu haben. Nur das mit dem reverse funktioniert nicht ganz , denn sublists :: [a] -> [[a]] sublists []= [[]] sublists (x:xs) = reverse ( (x:xs) : sublists (init (x:xs)) ) ergibt [[1,2,3],[1],[],[1,2],[1,2,3,4]] wie also anders ? danke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Ich hab die Aufgabe so gelöst: (rekursiv und listenkomprehnsion) sublists :: [a] -> [[a]] sublists' [] = [[]] sublists' (x:l) = [[]] ++ [x:z | z <- sublists' l] sublists [] = [[]] sublists (x:l) = let z = sublists l in [[]] ++ map (x:) z |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Zu Skater203 und Luks: Habt ihr die zweite und letzte Aufgabe schon hingekriegt? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
2. jo.. sieh mal ein thema drunter .. da kriegste n Tip dazu .. und bei der letzten knobel ich immernoch son bissel .. haste ne idee dazu ? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Also bei remDuplicates klappt's irgendwie nicht. Kannst du den ganzen Code noch mal zeigen? Zur letzten Aufgabe hab ich überhaupt keine Idee. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
@Skater203: Das Problem ist, reverse wird jetzt auch bei den rekursiven Aufrufen aufgerufen, es soll aber nur einmal ganz zum Schluss aufgerufen werden. Das heißt, eine Hilfsfunktion sublists' schreiben, die die eigentliche Arbeit macht und sublists macht dann nur zum Schluss das reverse: sublists (x:xs) = reverse ( sublists' (x:xs) ). Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||