J'ai donc essayé d'implémenter bubblesort en utilisant les types de référence de ML. J'ai compilé le code dans Poly/ML et il semble que la boucle "while (! Flag)" ne s'exécute qu'une seule fois pour n'importe quelle entrée. Par exemple: [2,3,1] est "trié" à [2,1,3], c'est-à-dire que la première boucle a fonctionné mais que la seconde n'a jamais fonctionné.Pourquoi cette boucle ML standardort ne s'exécute-t-elle qu'une seule fois?
"Flag up" a été imprimé une fois.
Qu'est-ce qui ne va pas?
Merci.
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;
code complet du module je l'ai écrit, si nécessaire, se trouve here.
Drive-by commentaire: 53,33% (mesuré avec précision) de vos parenthèses sont redondants. –
Merci! Je savais que certains d'entre eux allaient être redondants mais je me prépare à la hâte pour un examen où la correction est beaucoup plus importante que le style donc je le laisse glisser :) –