(* Déterminer si une valeur v apparaît dans un tableau a. *)

(* avec une boucle while *)

let occurs_for a v =
  let i = ref 0 in
  while !i < Array.length a && a.(!i) <> v do
    incr i
  done;
  !i < Array.length a

(* avec une fonction récursive *)

let occurs_rec a v =
  let rec check i = i < Array.length a && (a.(i) = v || check (i + 1)) in
  check 0

(* note : dans les deux cas, l'évaluation paresseuse de && interrompt le
   calcul dès que la valeur est trouvée *)

(* quelques tests *)

let () =
  let test a v b = assert (occurs_for a v = b); assert (occurs_rec a v = b) in
  test [||] 1 false;
  test [|42|] 42 true;
  test [|-1;1|] 0 false;
  let a = Array.init 10 (fun i -> i) in
  for i = 0 to 9 do test a i true done;
  test a 10 false



This document was generated using caml2html