Gepostet: |
Haskell Listen | ||||||||||
Hallo liebe Foren-Mitglieder, ich bin verzweifelt dabei, eine Funktion zu programmieren, die eine Liste als Argument erwartet, die Elemente an ungerader Stelle mit dem jeweils nächsten Element (an gerader Stelle) vertauscht und die geänderte Liste als Ergebnis liefert. Wenn die Liste ungerade ist, bleibt das letzte Element der Liste an seinem Platz. Kann jemand helfen? Habe bereits mehrer Tutorials durchgelesen und andere Veröffentlichungen aber komme auf keinen grünen Zweig. Vielen lieben Dank schonmal und noch einen schönen Montag! Mit Zitat antworten |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, woran scheitert es denn? Als Ansatz mal die drei Fälle, die du unterscheiden müsstest: 1.) die leere Liste, also [] 2.) wenn die Liste noch ein Element enthält [x] 3.) wenn mindestens zwei Elemente in der Liste sind, also (x:y:rest) und die Restliste rest wird dann rekursiv bearbeitet. Die drei Fälle kannst du jeweils mit einer Musteranpassung abfangen und dann entsprechend bearbeiten. Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, schonmal Danke für Deine Antwort :-) Soweit ist alles klar, nur weiss ich nicht wie ich das vertauschen anstellen soll?! Muss ich erst lenght list machen und dann...wie tausche ich jeweils die Elemente aus? Vielen Lieben Dank schonmal! |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Na das Vertauschen funktioniert ähnlich wie bei der Musteranpassung, nur eben dass du bei der Musteranpassung die Liste zerlegst. Auf der rechten Seite der Funktion musst du die Liste dann wieder zusammensetzen, entsprechend mit vertauschtem x- und y-Wert. length wird dir hier nicht viel helfen denke ich. (Außer du willst bspw. bei der Liste [1,2] keine Vertauschungen vornehmen, dann müsstest du vor dem ersten Tauschen die Länge der Liste bestimmen.) Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Realisierung : vertausch [] = [] vertausch [x] = [x] vertausch (x:y:xs)= y : x : vertausch xs > vertausch [1,2,3,4,5] --> [2,1,4,3,5] |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Variante mit Akkumulator: vertausch2 xs = reverse(hilfFunk xs []) hilfFunk [] acc = acc hilfFunk [x] acc = (x:acc) hilfFunk (x:y:xs) acc = hilfFunk xs (x:y:acc) >vertausch2 [1,2,3,4,5] --> [2,1,4,3,5] |
|||||||||||
Zum Seitenanfang | |||||||||||