summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Weis <Pierre.Weis@inria.fr>1997-11-12 08:56:35 +0000
committerPierre Weis <Pierre.Weis@inria.fr>1997-11-12 08:56:35 +0000
commit91f7a1961e4a37bebdf744b05f031a8ce26e00f2 (patch)
tree487b64560d7559b20dc9329061d9163735c735ff
parent5f7de2a00071620fe066a45b0b884afd9e1051ad (diff)
Ajout de Array.init
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1759 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--Changes2
-rw-r--r--stdlib/array.ml16
-rw-r--r--stdlib/array.mli3
3 files changed, 16 insertions, 5 deletions
diff --git a/Changes b/Changes
index ccaec70cc..12ff2ea2b 100644
--- a/Changes
+++ b/Changes
@@ -62,7 +62,7 @@ Objective Caml 1.06:
Parse_error to Error (don't you love gratuitous changes?).
- String: added index, rindex, index_from, rindex_from.
- Added Map.map, Set.subset, Printexc.to_string, Array.mapi,
- Array.iteri, Array.fold_left, Array.fold_right.
+ Array.iteri, Array.fold_left, Array.fold_right, Array.init.
* ocamllex: lexers generated by ocamllex can now handle all characters,
including '\000'.
diff --git a/stdlib/array.ml b/stdlib/array.ml
index 8aef73b8d..3c012062b 100644
--- a/stdlib/array.ml
+++ b/stdlib/array.ml
@@ -21,6 +21,14 @@ external unsafe_set: 'a array -> int -> 'a -> unit = "%array_unsafe_set"
external make: int -> 'a -> 'a array = "make_vect"
external create: int -> 'a -> 'a array = "make_vect"
+let init l f =
+ if l = 0 then [||] else
+ let res = create l (f 0) in
+ for i = 1 to pred l do
+ unsafe_set res i (f i)
+ done;
+ res
+
let make_matrix sx sy init =
let res = create sx [||] in
for x = 0 to pred sx do
@@ -33,11 +41,11 @@ let create_matrix = make_matrix
let copy a =
let l = length a in
if l = 0 then [||] else begin
- let r = create l (unsafe_get a 0) in
- for i = 1 to l-1 do
- unsafe_set r i (unsafe_get a i)
+ let res = create l (unsafe_get a 0) in
+ for i = 1 to pred l do
+ unsafe_set res i (unsafe_get a i)
done;
- r
+ res
end
let append a1 a2 =
diff --git a/stdlib/array.mli b/stdlib/array.mli
index 413eb15b8..218b0e740 100644
--- a/stdlib/array.mli
+++ b/stdlib/array.mli
@@ -37,6 +37,9 @@ external create: int -> 'a -> 'a array = "make_vect"
Consequently, if [x] is mutable, it is shared among all elements
of the array, and modifying [x] through one of the array entries
will modify all other entries at the same time. *)
+val init: int -> (int -> 'a) -> 'a array
+ (* [Array.init n f] returns a fresh array of length [n],
+ with element number [i] equal to [f i]. *)
val make_matrix: int -> int -> 'a -> 'a array array
val create_matrix: int -> int -> 'a -> 'a array array
(* [Array.make_matrix dimx dimy e] returns a two-dimensional array