Code : Tout sélectionner
fractran(n):={
local l,m,stop;
l:=[455/33,11/13,1/11,3/7,11/2,1/3];
stop:=false;
repeter
m:=-1;
repeter
m++;
jusqu_a (type(n*l[m])=DOM_INT ou m=size(l)-1)
si type(n*l[m])=DOM_INT
alors
n*=l[m];
sinon
stop:=true;
fsi
jusqu_a stop;
retourne n;
}
Pour voir comment le programme fonctionne, par exemple pour calculer 3*2 (en entrant donc 72), le débogueur est très utile (on entre debug(fractran(72)) dans la console d'Xcas). Encore plus sur les exemples "Fibonacci" et "Collatz" en bas de l'article de wikipedia, où le plus intéressant est la suite des nombres produits pendant l'exécution du programme, plutôt que la seule valeur finale.
D'ailleurs la modification du code ci-dessus qui, au lieu de la valeur finale de n, envoie la liste de ces valeurs, est laissée en exercice.