Also habe ich versucht, bubblesort mit ML-Referenztypen zu implementieren. Ich habe den Code in Poly/ML kompiliert und es scheint, dass die "while (! Flag)" - Schleife nur einmal für jede Eingabe ausgeführt wird.Warum wird diese Schleife des Standard-ML-Bubblesorts nur einmal ausgeführt?
Zum Beispiel: [2,3,1] wird zu [2,1,3] "sortiert", d. H. Die erste Schleife funktionierte, aber die zweite lief nie.
"Flag up" wurde einmal gedruckt.
Was ist los?
Danke.
fun bubbleSort l = (* l being a list of references *)
let
val it = ref 0 (* iterator variable *)
val len = length l
val flag = ref true (* to be set to true when a swap is made *)
in
while (!flag) do
(
flag := false;
while ((!it) < (len-1)) do
(
if (get l (!it)) > (get l ((!it)+1))
then (swap_next l (!it); flag := true; TextIO.print "Flag up\n")
else();
it := (!it) + 1
)
)
end;
Voll Code des Moduls schrieb ich, wenn nötig, können here gefunden werden.
Drive-by Kommentar: 53,33% (gemessen genau) Ihre Klammern redundant sind. –
Danke! Ich war mir bewusst, dass einige von ihnen überflüssig sein würden, aber ich bereite mich hastig auf eine Prüfung vor, bei der Korrektheit wichtiger ist als Stil, also lasse ich sie gleiten :) –