Module Base.Array
Mutable vector of elements of type 'a with O(1) get and set operations.
include Binary_searchable.S1 with type 'a t := 'a t
- val binary_search : ('a t, 'a, 'key) Base__.Binary_searchable_intf.binary_search
- val binary_search_segmented : ('a t, 'a) Base__.Binary_searchable_intf.binary_search_segmented
include Container.S1 with type 'a t := 'a t
- val mem : 'a t -> 'a -> equal:('a -> 'a -> bool) -> bool
- Checks whether the provided element is there, using - equal.
- val length : 'a t -> int
- val is_empty : 'a t -> bool
- val iter : 'a t -> f:('a -> unit) -> unit
- val fold : 'a t -> init:'accum -> f:('accum -> 'a -> 'accum) -> 'accum
- fold t ~init ~freturns- f (... f (f (f init e1) e2) e3 ...) en, where- e1..enare the elements of- t
- val fold_result : 'a t -> init:'accum -> f:('accum -> 'a -> ('accum, 'e) Result.t) -> ('accum, 'e) Result.t
- fold_result t ~init ~fis a short-circuiting version of- foldthat runs in the- Resultmonad. If- freturns an- Error _, that value is returned without any additional invocations of- f.
- val fold_until : 'a t -> init:'accum -> f:('accum -> 'a -> ('accum, 'final) Base__.Container_intf.Continue_or_stop.t) -> finish:('accum -> 'final) -> 'final
- fold_until t ~init ~f ~finishis a short-circuiting version of- fold. If- freturns- Stop _the computation ceases and results in that value. If- freturns- Continue _, the fold will proceed. If- fnever returns- Stop _, the final result is computed by- finish.- Example: - type maybe_negative = | Found_negative of int | All_nonnegative of { sum : int } (** [first_neg_or_sum list] returns the first negative number in [list], if any, otherwise returns the sum of the list. *) let first_neg_or_sum = List.fold_until ~init:0 ~f:(fun sum x -> if x < 0 then Stop (Found_negative x) else Continue (sum + x)) ~finish:(fun sum -> All_nonnegative { sum }) ;; let x = first_neg_or_sum [1; 2; 3; 4; 5] val x : maybe_negative = All_nonnegative {sum = 15} let y = first_neg_or_sum [1; 2; -3; 4; 5] val y : maybe_negative = Found_negative -3
- val exists : 'a t -> f:('a -> bool) -> bool
- Returns - trueif and only if there exists an element for which the provided function evaluates to- true. This is a short-circuiting operation.
- val for_all : 'a t -> f:('a -> bool) -> bool
- Returns - trueif and only if the provided function evaluates to- truefor all elements. This is a short-circuiting operation.
- val count : 'a t -> f:('a -> bool) -> int
- Returns the number of elements for which the provided function evaluates to true. 
- val sum : (module Base__.Container_intf.Summable with type t = 'sum) -> 'a t -> f:('a -> 'sum) -> 'sum
- Returns the sum of - f ifor all- iin the container.
- val find : 'a t -> f:('a -> bool) -> 'a option
- Returns as an - optionthe first element for which- fevaluates to true.
- val find_map : 'a t -> f:('a -> 'b option) -> 'b option
- Returns the first evaluation of - fthat returns- Some, and returns- Noneif there is no such element.
- val to_list : 'a t -> 'a list
- val to_array : 'a t -> 'a array
- val min_elt : 'a t -> compare:('a -> 'a -> int) -> 'a option
- Returns a minimum (resp maximum) element from the collection using the provided - comparefunction, or- Noneif the collection is empty. In case of a tie, the first element encountered while traversing the collection is returned. The implementation uses- foldso it has the same complexity as- fold.
- val max_elt : 'a t -> compare:('a -> 'a -> int) -> 'a option
include Invariant.S1 with type 'a t := 'a t
- val invariant : 'a Base__.Invariant_intf.inv -> 'a t Base__.Invariant_intf.inv
- val max_length : int
- Maximum length of a normal array. The maximum length of a float array is - max_length/2on 32-bit machines and- max_lengthon 64-bit machines.
- val get : 'a t -> int -> 'a
- Array.get a nreturns the element number- nof array- a. The first element has number 0. The last element has number- Array.length a - 1. You can also write- a.(n)instead of- Array.get a n.- Raise - Invalid_argument "index out of bounds"if- nis outside the range 0 to- (Array.length a - 1).
- val set : 'a t -> int -> 'a -> unit
- Array.set a n xmodifies array- ain place, replacing element number- nwith- x. You can also write- a.(n) <- xinstead of- Array.set a n x.- Raise - Invalid_argument "index out of bounds"if- nis outside the range 0 to- Array.length a - 1.
- val unsafe_get : 'a t -> int -> 'a
- Unsafe version of - get. Can cause arbitrary behavior when used for an out-of-bounds array access.
- val unsafe_set : 'a t -> int -> 'a -> unit
- Unsafe version of - set. Can cause arbitrary behavior when used for an out-of-bounds array access.
- val create : len:int -> 'a -> 'a t
- create ~len xcreates an array of length- lenwith the value- xpopulated in each element.
- val init : int -> f:(int -> 'a) -> 'a t
- init n ~fcreates an array of length- nwhere the- ith element (starting at zero) is initialized with- f i.
- val make_matrix : dimx:int -> dimy:int -> 'a -> 'a t t
- Array.make_matrix dimx dimy ereturns a two-dimensional array (an array of arrays) with first dimension- dimxand second dimension- dimy. All the elements of this new matrix are initially physically equal to- e. The element (- x,y) of a matrix- mis accessed with the notation- m.(x).(y).- Raise - Invalid_argumentif- dimxor- dimyis negative or greater than- Array.max_length.- If the value of - eis a floating-point number, then the maximum size is only- Array.max_length / 2.
- val append : 'a t -> 'a t -> 'a t
- Array.append v1 v2returns a fresh array containing the concatenation of the arrays- v1and- v2.
- val copy : 'a t -> 'a t
- Array.copy areturns a copy of- a, that is, a fresh array containing the same elements as- a.
- val fill : 'a t -> pos:int -> len:int -> 'a -> unit
- Array.fill a ofs len xmodifies the array- ain place, storing- xin elements number- ofsto- ofs + len - 1.- Raise - Invalid_argument "Array.fill"if- ofsand- lendo not designate a valid subarray of- a.
Array.blit v1 o1 v2 o2 len copies len elements from array v1, starting at element number o1, to array v2, starting at element number o2. It works correctly even if v1 and v2 are the same array, and the source and destination chunks overlap.
Raise Invalid_argument "Array.blit" if o1 and len do not designate a valid subarray of v1, or if o2 and len do not designate a valid subarray of v2.
int_blit and float_blit provide fast bound-checked blits for immediate data types. The unsafe versions do not bound-check the arguments.
include Blit.S1 with type 'a t := 'a t
- val blit : ('a t, 'a t) Base__.Blit_intf.blit
- val blito : ('a t, 'a t) Base__.Blit_intf.blito
- val unsafe_blit : ('a t, 'a t) Base__.Blit_intf.blit
- val sub : ('a t, 'a t) Base__.Blit_intf.sub
- val subo : ('a t, 'a t) Base__.Blit_intf.subo
- val of_list : 'a list -> 'a t
- Array.of_list lreturns a fresh array containing the elements of- l.
- val map : 'a t -> f:('a -> 'b) -> 'b t
- Array.map t ~fapplies function- fto all the elements of- t, and builds an array with the results returned by- f:- [| f t.(0); f t.(1); ...; f t.(Array.length t - 1) |].
- val folding_map : 'a t -> init:'b -> f:('b -> 'a -> 'b * 'c) -> 'c t
- folding_mapis a version of- mapthat threads an accumulator through calls to- f.
- val folding_mapi : 'a t -> init:'b -> f:(int -> 'b -> 'a -> 'b * 'c) -> 'c t
- val fold_map : 'a t -> init:'b -> f:('b -> 'a -> 'b * 'c) -> 'b * 'c t
- Array.fold_mapis a combination of- Array.foldand- Array.mapthat threads an accumulator through calls to- f.
- val fold_mapi : 'a t -> init:'b -> f:(int -> 'b -> 'a -> 'b * 'c) -> 'b * 'c t
- val iteri : 'a t -> f:(int -> 'a -> unit) -> unit
- Like - Array.iter, but the function is applied to the index of the element as first argument, and the element itself as second argument.
- val mapi : 'a t -> f:(int -> 'a -> 'b) -> 'b t
- Like - Array.map, but the function is applied to the index of the element as first argument, and the element itself as second argument.
- val foldi : 'a t -> init:'b -> f:(int -> 'b -> 'a -> 'b) -> 'b
- val fold_right : 'a t -> f:('a -> 'b -> 'b) -> init:'b -> 'b
- Array.fold_right f a ~initcomputes- f a.(0) (f a.(1) ( ... (f a.(n-1) init) ...)), where- nis the length of the array- a.
- val sort : ?pos:int -> ?len:int -> 'a t -> compare:('a -> 'a -> int) -> unit
- sortuses constant heap space.- stable_sortuses linear heap space.- To sort only part of the array, specify - posto be the index to start sorting from and- lenindicating how many elements to sort.
- val stable_sort : 'a t -> compare:('a -> 'a -> int) -> unit
- val is_sorted : 'a t -> compare:('a -> 'a -> int) -> bool
- val is_sorted_strictly : 'a t -> compare:('a -> 'a -> int) -> bool
- is_sorted_strictly xs ~compareiff- is_sorted xs ~compareand no two consecutive elements in- xsare equal according to- compare.
- val concat_map : 'a t -> f:('a -> 'b array) -> 'b array
- Like - List.concat_map,- List.concat_mapi.
- val concat_mapi : 'a t -> f:(int -> 'a -> 'b array) -> 'b array
- val partition_tf : 'a t -> f:('a -> bool) -> 'a t * 'a t
- val partitioni_tf : 'a t -> f:(int -> 'a -> bool) -> 'a t * 'a t
- val cartesian_product : 'a t -> 'b t -> ('a * 'b) t
- val transpose : 'a t t -> 'a t t option
- transposein the sense of a matrix transpose. It returns- Noneif the arrays are not all the same length.
- val transpose_exn : 'a t t -> 'a t t
- val filter_opt : 'a option t -> 'a t
- filter_opt arrayreturns a new array where- Noneentries are omitted and- Some xentries are replaced with- x. Note that this changes the index at which elements will appear.
- val filter_map : 'a t -> f:('a -> 'b option) -> 'b t
- filter_map ~f arraymaps- fover- arrayand filters- Noneout of the results.
- val filter_mapi : 'a t -> f:(int -> 'a -> 'b option) -> 'b t
- Like - filter_mapbut uses- Array.mapi.
- val for_alli : 'a t -> f:(int -> 'a -> bool) -> bool
- Like - for_all, but passes the index as an argument.
- val existsi : 'a t -> f:(int -> 'a -> bool) -> bool
- Like - exists, but passes the index as an argument.
- val counti : 'a t -> f:(int -> 'a -> bool) -> int
- Like - count, but passes the index as an argument.
- val iter2_exn : 'a t -> 'b t -> f:('a -> 'b -> unit) -> unit
- val map2_exn : 'a t -> 'b t -> f:('a -> 'b -> 'c) -> 'c t
- val fold2_exn : 'a t -> 'b t -> init:'c -> f:('c -> 'a -> 'b -> 'c) -> 'c
- val for_all2_exn : 'a t -> 'b t -> f:('a -> 'b -> bool) -> bool
- for_all2_exn t1 t2 ~ffails if- length t1 <> length t2.
- val exists2_exn : 'a t -> 'b t -> f:('a -> 'b -> bool) -> bool
- exists2_exn t1 t2 ~ffails if- length t1 <> length t2.
- val filter : 'a t -> f:('a -> bool) -> 'a t
- filter t ~fremoves the elements for which- freturns false.
- val swap : 'a t -> int -> int -> unit
- swap arr i jswaps the value at index- iwith that at index- j.
- val rev_inplace : 'a t -> unit
- rev_inplace treverses- tin place.
- val of_list_rev : 'a list -> 'a t
- of_list_rev lconverts from list then reverses in place.
- val of_list_map : 'a list -> f:('a -> 'b) -> 'b t
- of_list_map l ~fis the same as- of_list (List.map l ~f).
- val of_list_mapi : 'a list -> f:(int -> 'a -> 'b) -> 'b t
- of_list_mapi l ~fis the same as- of_list (List.mapi l ~f).
- val of_list_rev_map : 'a list -> f:('a -> 'b) -> 'b t
- of_list_rev_map l ~fis the same as- of_list (List.rev_map l ~f).
- val of_list_rev_mapi : 'a list -> f:(int -> 'a -> 'b) -> 'b t
- of_list_rev_mapi l ~fis the same as- of_list (List.rev_mapi l ~f).
- val replace : 'a t -> int -> f:('a -> 'a) -> unit
- replace t i ~f=- t.(i) <- f (t.(i)).
- val replace_all : 'a t -> f:('a -> 'a) -> unit
- Modifies an array in place -- - ar.(i)will be set to- f(ar.(i)).
- val map_inplace : 'a t -> f:('a -> 'a) -> unit
- Modifies an array in place, applying - fto every element of the array
- val find_exn : 'a t -> f:('a -> bool) -> 'a
- find_exn f treturns the first- ain- tfor which- f t.(i)is true. It raises- Caml.Not_foundor- Not_found_sif there is no such- a.
- val find_map_exn : 'a t -> f:('a -> 'b option) -> 'b
- Returns the first evaluation of - fthat returns- Some. Raises- Caml.Not_foundor- Not_found_sif- falways returns- None.
- val findi : 'a t -> f:(int -> 'a -> bool) -> (int * 'a) option
- findi t freturns the first index- iof- tfor which- f i t.(i)is true
- val findi_exn : 'a t -> f:(int -> 'a -> bool) -> int * 'a
- findi_exn t freturns the first index- iof- tfor which- f i t.(i)is true. It raises- Caml.Not_foundor- Not_found_sif there is no such element.
- val find_mapi : 'a t -> f:(int -> 'a -> 'b option) -> 'b option
- find_mapi t fis like- find_mapbut passes the index as an argument.
- val find_mapi_exn : 'a t -> f:(int -> 'a -> 'b option) -> 'b
- find_mapi_exnis like- find_map_exnbut passes the index as an argument.
- val find_consecutive_duplicate : 'a t -> equal:('a -> 'a -> bool) -> ('a * 'a) option
- find_consecutive_duplicate t ~equalreturns the first pair of consecutive elements- (a1, a2)in- tsuch that- equal a1 a2. They are returned in the same order as they appear in- t.
- val reduce : 'a t -> f:('a -> 'a -> 'a) -> 'a option
- reduce f [a1; ...; an]is- Some (f (... (f (f a1 a2) a3) ...) an). Returns- Noneon the empty array.
- val reduce_exn : 'a t -> f:('a -> 'a -> 'a) -> 'a
- val permute : ?random_state:Random.State.t -> 'a t -> unit
- permute ?random_state trandomly permutes- tin place.- permuteside-effects- random_stateby repeated calls to- Random.State.int. If- random_stateis not supplied,- permuteuses- Random.State.default.
- val random_element : ?random_state:Random.State.t -> 'a t -> 'a option
- random_element ?random_state tis- Noneif- tis empty, else it is- Some xfor some- xchosen uniformly at random from- t.- random_elementside-effects- random_stateby calling- Random.State.int. If- random_stateis not supplied,- random_elementuses- Random.State.default.
- val random_element_exn : ?random_state:Random.State.t -> 'a t -> 'a
- val zip : 'a t -> 'b t -> ('a * 'b) t option
- zipis like- List.zip, but for arrays.
- val zip_exn : 'a t -> 'b t -> ('a * 'b) t
- val unzip : ('a * 'b) t -> 'a t * 'b t
- unzipis like- List.unzip, but for arrays.
- val sorted_copy : 'a t -> compare:('a -> 'a -> int) -> 'a t
- sorted_copy ar comparereturns a shallow copy of- arthat is sorted. Similar to List.sort
- val last : 'a t -> 'a
- val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool
- val unsafe_truncate : _ t -> len:int -> unit
- unsafe_truncate t ~lendrops- length t - lenelements from the end of- t, changing- tso that- length t = lenafterwards.- unsafe_truncateraises if- len <= 0 || len > length t.- It is not safe to do - unsafe_truncatein the middle of a call to- map,- iter, etc., or if you have given this array out to anything not under your control: in general, code can rely on an array's length not changing. One must ensure code that calls- unsafe_truncateon an array does not interfere with other code that manipulates the array.
- val to_sequence : 'a t -> 'a Sequence.t
- The input array is copied internally so that future modifications of it do not change the sequence. 
- val to_sequence_mutable : 'a t -> 'a Sequence.t
- The input array is shared with the sequence and modifications of it will result in modification of the sequence.