29Fermer31
SallyLe 11/02/2004 à 12:07
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 happy

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 cheeky) (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 cheeky
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 happy²