www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

ABI03

Gepostet:
03.05.2010 16:58

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    
 
Siracusa

Gepostet:
03.05.2010 17:25

   
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    
 
ABI03

Gepostet:
03.05.2010 19:41

   
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    
 
Siracusa

Gepostet:
04.05.2010 02:12

   
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    
 
studento

Gepostet:
11.05.2010 23:08

   
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    
 
studento

Gepostet:
12.05.2010 15:47

   
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