Community
Szene & News
Locations
Impressum
|
Forum / Bits und Bytes
Türme von Hanoi in Haskell

Markus2 - 32
Profi
(offline)
Dabei seit 11.2006
924
Beiträge
|
Geschrieben am: 16.12.2011 um 20:39 Uhr
Zuletzt editiert am: 16.12.2011 um 20:48 Uhr
|
|
Ich habe mich in letzter Zeit etwas mit Haskell beschäftigt.
Dabei habe ich als Übung den recht bekannten rekursiven Lösungsalgorithmus
für die Türme von Hanoi nachprogrammiert.
Das Ergebnis funktioniert problemlos.
Es gefällt mir aber noch nicht ganz.
Insbesondere Zeile 33-38 finde ich unschön, da ich da die Funktion quasi sechs mal Programmieren musste. Allerdings weiß ich derzeit nicht, wie ich das vermeiden könnte.
Daher würde ich mich freuen, wenn mir da jemand Tipps geben könnte, wie man das schöner schreiben kann. (Oder wenn mir jemand bestätigt, dass es aus irgendeinem Grund tatsächlich nicht besser geht.)
Edit: Auch unabhängig von dieser Fragestellung würde ich mich über Kritik freuen. Ich möchte immerhin etwas lernen.
Never attribute to malice what can be adequately explained by stupidity.
|
|
Colt-45 - 37
Halbprofi
(offline)
Dabei seit 09.2009
279
Beiträge
|
Geschrieben am: 29.12.2011 um 21:33 Uhr
|
|
Ersma ein obligatorisches "Keine Ahnung"...
Kritik: Du behauptest, diesen Algorithmus selber nachprogrammiert zu haben, dann sollten Kommentare wie " http://en.wikipedia.org/wiki/Tower_of_Hanoi" raus...
Ausserdem weiß ich nicht, warum man in Haskell programmieren sollte, aber das is wieder was anderes...
Zu deiner Frage:
Du könntest die MEthode moveDisc komplett anders gestalten, indem du ihr zwei parameter übergibst, startwert und zielwert, ums mal in java auszudrücken:
public void moveDisc(int start, int ziel)
{
//hier is nun programmlogik drin
}
mal angenommen, die drei positionen L, M und R sind als konstante Integerwerte definiert:
final int L = 1;
final int M = 2;
final int R = 3;
Dann könntest du diese methode aufrufen mit
moveDisc(M, L); um die Scheibe von der Mitte nach links zu verschieben.
Ich hoffe, dass ich dein Problem richtig erkannt hab
I said Colt 45 and two zigzags, baby that's all we need...
|
|
Markus2 - 32
Profi
(offline)
Dabei seit 11.2006
924
Beiträge
|
Geschrieben am: 30.12.2011 um 00:24 Uhr
|
|
Zitat von Colt-45: Ersma ein obligatorisches "Keine Ahnung"... Erstmal danke für deine Antwort.
Zitat von Colt-45: Kritik: Du behauptest, diesen Algorithmus selber nachprogrammiert zu haben, dann sollten Kommentare wie " http://en.wikipedia.org/wiki/Tower_of_Hanoi" raus...
Der Kommentar ist da sozusagen als Problembeschreibung.
Wenn jemand diesen Code liest, dann kann er dort nachlesen, welchen Sinn das ganze hat.
Code ohne Zusammenhang, was getan werden soll ist deutlich schwerer zu lesen.
Weshalb das unpassend sein soll, habe ich erlich gesagt noch nicht ganz verstanden.
Zitat von Colt-45: Ausserdem weiß ich nicht, warum man in Haskell programmieren sollte, aber das is wieder was anderes... Ich halte Haskell einfach für eine interessante Sprache. Auch den funktionalen Ansatz finde ich faszinierend.
Zitat von Colt-45: Zu deiner Frage:
Du könntest die MEthode moveDisc komplett anders gestalten, indem du ihr zwei parameter übergibst, startwert und zielwert, ums mal in java auszudrücken:
public void moveDisc(int start, int ziel)
{
//hier is nun programmlogik drin
}
mal angenommen, die drei positionen L, M und R sind als konstante Integerwerte definiert:
final int L = 1;
final int M = 2;
final int R = 3;
Dann könntest du diese methode aufrufen mit
moveDisc(M, L); um die Scheibe von der Mitte nach links zu verschieben.
Ich hoffe, dass ich dein Problem richtig erkannt hab
Der Funktion (in Haskell gibt es keine Methoden) werden bereits zwei Parameter übergeben.
Nur musste ich die Fälle alle einzeln ausprogrammieren.
Das Problem ist, dass ich die drei Stapel nicht indizieren kann. Das Tupel, dass die drei Listen enthält, lässt sich in Haskell leider nur über Pattern-Matching zerlegen, und nicht wie ein Array in Java mit eckigen Klammern indizieren. Darin liegt denke ich das Hauptproblem.
Der Datentyp für die Positionen ist übrigens auch kein Integer.
Jedenfalls danke für deine Mühe, das Programm anzuschauen.
Anscheinend wird Haskell noch seltener benutzt, als ich dachte. Ich hatte gehofft, hier wenigstens einzelne zu finden, die sich damit auskennen.
Never attribute to malice what can be adequately explained by stupidity.
|
|
schnaebber
Champion
(offline)
Dabei seit 04.2006
6006
Beiträge
|
Geschrieben am: 30.12.2011 um 11:37 Uhr
|
|
Zitat von Markus2:
Anscheinend wird Haskell noch seltener benutzt, als ich dachte. Ich hatte gehofft, hier wenigstens einzelne zu finden, die sich damit auskennen. Den Scheiss benutzen doch nur Studenten, die ihre Aufgabenblätter erledigen müssen. Bist du auch einer?
There is room for all God's creatures, right next to the potato salad and the cole slaw.
|
|
Giglamesh - 28
Profi
(offline)
Dabei seit 01.2011
910
Beiträge
|
Geschrieben am: 30.12.2011 um 11:41 Uhr
|
|
Zitat von schnaebber: Zitat von Markus2:
Anscheinend wird Haskell noch seltener benutzt, als ich dachte. Ich hatte gehofft, hier wenigstens einzelne zu finden, die sich damit auskennen. Den Scheiss benutzen doch nur Studenten, die ihre Aufgabenblätter erledigen müssen. Bist du auch einer?
Den Eindruck hab ich auch
Per aspera ad astra
|
|
Markus2 - 32
Profi
(offline)
Dabei seit 11.2006
924
Beiträge
|
Geschrieben am: 30.12.2011 um 15:47 Uhr
|
|
Zitat von schnaebber: Den Scheiss benutzen doch nur Studenten, die ihre Aufgabenblätter erledigen müssen. Bist du auch einer?
Nein, ich bin (noch) kein Student. Ich finde die Sprache auch so interessant.
Never attribute to malice what can be adequately explained by stupidity.
|
|
schnaebber
Champion
(offline)
Dabei seit 04.2006
6006
Beiträge
|
Geschrieben am: 30.12.2011 um 15:54 Uhr
|
|
Kannst ja mal noch Altgriechisch lernen, wenn du so viel Sinn für Nutzloses hast.
There is room for all God's creatures, right next to the potato salad and the cole slaw.
|
|
Markus2 - 32
Profi
(offline)
Dabei seit 11.2006
924
Beiträge
|
Geschrieben am: 30.12.2011 um 16:54 Uhr
|
|
Zitat von schnaebber: Kannst ja mal noch Altgriechisch lernen, wenn du so viel Sinn für Nutzloses hast.
Naja, Sprachen liegen mir nicht so. Und ich denke, dass Haskell durchaus ein interressantes Konzept hat.
Weshalb sollte es denn nutzlos sein, nur weil es selten benutzt wird.
Never attribute to malice what can be adequately explained by stupidity.
|
|
Forum / Bits und Bytes
|