Fonctions du module Array (Ocaml)
Les fonctions Array.length et Array.make ne sont pas réécrivables.
Array.filter n'existe pas.
(* Copie d'un tableau ie Array.copy *)
let copy a =
let n = Array.length a in
let r = Array.make n a.(0) in
for i = 0 to n - 1 do
r.(i) <- a.(i)
done;
r
(* La copie créée est indépendante de l'original *)
(* Création d'une matrice m x n remplie avec x ie Array.make_matrix *)
let make_matrix m n x =
let r = Array.make m [||] in
for i = 0 to m - 1 do
r.(i) <- Array.make n x
done;
r
(* Initialise un tableau avec f ie Array.init *)
let init n f =
if n < 0 then invalid_arg "init";
let r = Array.make n (f 0) in
for i = 0 to n - 1 do
r.(i) <- f i
done;
r
(* Test si un élément est présent ie Array.mem *)
let mem x a =
let n = Array.length a in
let rec loop i =
i < n && (a.(i) = x || loop (i + 1))
in
loop 0
(* Test si au moins un élément satisfait p ie Array.exists *)
let exists p a =
let n = Array.length a in
let rec loop i =
i < n && (p a.(i) || loop (i + 1))
in
loop 0
(* Test si tous les éléments satisfont p ie Array.for_all *)
let for_all p a =
let n = Array.length a in
let rec loop i =
i >= n || (p a.(i) && loop (i + 1))
in
loop 0
(* Sous-tableau de a à partir de i de longueur len ie Array.sub *)
let sub a i len =
if i < 0 || len < 0 || i + len > Array.length a then invalid_arg "sub";
let r = Array.make len a.(i) in
for k = 0 to len - 1 do
r.(k) <- a.(i + k)
done;
r
(* Applique f à chaque élément ie Array.iter *)
let iter f a =
let n = Array.length a in
for i = 0 to n - 1 do
f a.(i)
done