Landei
Top Contributor
Ich habe den "iterativen" Algorithmus von Buneman und Levy ( Türme von Hanoi ? Wikipedia ) umgesetzt, und dabei keine rekursiven Aufrufe benutzt. Natürlich kann iterate ebenfalls rekursiv umgesetzt sein (und ist es wahrscheinlich auch), aber prinzipiell könnte es auch iterativ programmiert sein - genau wie man in Java eine Methode schreiben könnte, die [c]while[/c] "simuliert", aber intern rekursiv arbeitet. Aber dieses Detail ist für die Arbeitsweise des Algorithmus völlig irrelevant - genauso, wie es beim Algorithmus zur Berechnung von Binomialkoeffizienten keinen Unterschied macht, ob ich die dazu benötigte Fakultät nun rekursiv oder iterativ berechne - man sieht es der Zahl am Ende nicht mehr an.
Ich denke aber, dass man auch in Haskell eine "wirklich" iterative Kontrollstruktur (mit lokal veränderlicher Zählvariable) schreiben kann, z.B. unter Verwendung der State-Monade. Es wäre vermutlich ziemlich unhandlich und kompliziert, aber prinzipiell spricht nichts dagegen.
[Edit]
Hier ist eine Implementierung einer "while-Schleife" als Monaden-Transformer: Control.Monad.LoopWhile
Und hier als Funktion über einer Monade (die aber intern rekursiv realisiert ist): Haskell While Loop It Seemed Like a Good Idea at the Time
Ich denke aber, dass man auch in Haskell eine "wirklich" iterative Kontrollstruktur (mit lokal veränderlicher Zählvariable) schreiben kann, z.B. unter Verwendung der State-Monade. Es wäre vermutlich ziemlich unhandlich und kompliziert, aber prinzipiell spricht nichts dagegen.
[Edit]
Hier ist eine Implementierung einer "while-Schleife" als Monaden-Transformer: Control.Monad.LoopWhile
Und hier als Funktion über einer Monade (die aber intern rekursiv realisiert ist): Haskell While Loop It Seemed Like a Good Idea at the Time
Zuletzt bearbeitet: