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

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
