diff options
-rw-r--r-- | Changes | 2 | ||||
-rw-r--r-- | stdlib/array.ml | 16 | ||||
-rw-r--r-- | stdlib/array.mli | 3 |
3 files changed, 16 insertions, 5 deletions
@@ -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 |