Une petite remarque en passant : il existe une construction syntaxique spéciale pour la boucle for car elle est souvent utilisée, mais il est intéressant de voir que
for i = 0 to n do <expr> done
est parfaitement équivalent à
let rec boucle i = (if i <= n then <expr>; boucle i + 1) in boucle 0
et que cette deuxième version n'utilise pas davantage de référence
D'ailleurs imaginons que Kevin râle en disant que quand même, en C, on a un truc plus souple avec la syntaxe for (initialisation; condition; incrémentation) (syntaxe àmha débile en ce qu'elle permet les pires abus, mais là n'est pas la question). Eh bien en caml on peut faire ceci (tiens je vais mettre des arguments optionnels tant qu'à faire, hystoire de se rapprocher vraiment du for du C... bon c'est carrément un gadget inutile en l'occurrence mais c'est pas grave

) (attention les args optionnels n'existent pas en caml-light ^^) :
let boucleforalaC ~init ?(cond = function _ -> true) ?(incr = function x -> x) body =
let rec do_boucle i = (if cond i then body i; do_boucle (incr i)) in do_boucle init
et je précise que la variable de boucle i peut être *n'importe quoi*, si on veut ça peut être un triplet d'un nombre, un booléen et une liste par exemple
Vous voyez bien que la conclusion s'impose : caml powa.
Ah oui, et je re-fais remarquer que je n'ai pas utilisé une seule référence dans ma fonction

²