summaryrefslogtreecommitdiffstats
path: root/stdlib/array.ml
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>1997-10-24 15:54:07 +0000
committerXavier Leroy <xavier.leroy@inria.fr>1997-10-24 15:54:07 +0000
commit56e001e1c4b07c45aa8e0d9ff4cbb085e8ac1bf8 (patch)
tree38db19ad695cfc911477581b49e5fe1139448fa4 /stdlib/array.ml
parent7de9d9776f1f2f9226e720355133e6a8731255d3 (diff)
Array.iteri Array.mapi Array.fold_left Array.fold_right
String.index String.rindex Filename: utiliser String.rindex Genlex: erreur dans doc git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1741 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'stdlib/array.ml')
-rw-r--r--stdlib/array.ml27
1 files changed, 27 insertions, 0 deletions
diff --git a/stdlib/array.ml b/stdlib/array.ml
index 7a103f4ea..f6477d1f9 100644
--- a/stdlib/array.ml
+++ b/stdlib/array.ml
@@ -111,6 +111,19 @@ let map f a =
r
end
+let iteri f a =
+ for i = 0 to length a - 1 do f i (unsafe_get a i) done
+
+let mapi f a =
+ let l = length a in
+ if l = 0 then [||] else begin
+ let r = create l (f 0 (unsafe_get a 0)) in
+ for i = 1 to l - 1 do
+ unsafe_set r i (f i (unsafe_get a i))
+ done;
+ r
+ end
+
let to_list a =
let rec tolist i res =
if i < 0 then res else tolist (i - 1) (unsafe_get a i :: res) in
@@ -124,3 +137,17 @@ let of_list = function
[] -> a
| hd::tl -> unsafe_set a i hd; fill (i+1) tl in
fill 1 tl
+
+let fold_left f x a =
+ let r = ref x in
+ for i = 0 to Array.length a - 1 do
+ r := f !r (unsafe_get a i)
+ done;
+ !r
+
+let fold_right f a x =
+ let r = ref x in
+ for i = Array.length a - 1 downto 0 do
+ r := f (unsafe_get a i) !r
+ done;
+ !r