Votre code présente plusieurs problèmes.
L'erreur est que le for
ne renvoie rien, et donc l'intérieur de la boucle est purement pour les effets secondaires. Donc, il devrait avoir le type d'unité. Votre utilisation de =
n'a pas de type d'unité, car =
est en fait l'opérateur d'égalité, compare deux valeurs et renvoie true
ou false
.
Vous utilisez donc le mauvais opérateur. Il semble que vous essayez d'attribuer à x
. Mais dans ML, vous ne pouvez pas affecter des "variables", car elles sont liées à une valeur lorsqu'elles sont définies et ne peuvent pas changer. Une façon d'obtenir la mutabilité consiste à utiliser une cellule mutable (appelée "référence"): vous utilisez la fonction ref
pour créer la cellule mutable à partir d'une valeur initiale; l'opérateur !
pour obtenir sa valeur; et l'opérateur :=
pour changer la valeur à l'intérieur.
Ainsi, par exemple:
let f q p rho=
let x = ref [] in
if q > p then
for i=0 to rho do
x := q :: !x
done;
!x;;
merci pour votre répondre, thong votre exemple en ajoutant "!" : x: = q ::! x – kafka
@Antonio: merci – newacct