package core_kernel
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=fd2b8c6715794df7a810a62b226f53720f211cd344b4afc9fab0498796d6b466
doc/core_kernel.vec/Vec/index.html
Module Vec
Source
A growable array of 'a
. Designed for efficiency and simplicity.
This interface is generated lazily: if you need a standard function we haven't added, feel free to add or ping the authors.
By default, Vec
operations use integers as indices. The functor Make
can be used to create a specialized version from any module implementing Intable.S
.
include Core.Invariant.S1 with type 'a t := 'a t
init n ~f
returns a fresh vector of length n
, with element number i
initialized to the result of f i
. In other words, init n ~f
tabulates the results of f
applied to the integers 0
to n-1
.
Raise Invalid_argument if n < 0
.
include Core.Container.S1 with type 'a t := 'a t
Checks whether the provided element is there, using equal
.
fold t ~init ~f
returns f (... f (f (f init e1) e2) e3 ...) en
, where e1..en
are the elements of t
val fold_result :
'a t ->
init:'acc ->
f:('acc -> 'a -> ('acc, 'e) Base.Result.t) ->
('acc, 'e) Base.Result.t
fold_result t ~init ~f
is a short-circuiting version of fold
that runs in the Result
monad. If f
returns an Error _
, that value is returned without any additional invocations of f
.
val fold_until :
'a t ->
init:'acc ->
f:('acc -> 'a -> ('acc, 'final) Base.Container.Continue_or_stop.t) ->
finish:('acc -> 'final) ->
'final
fold_until t ~init ~f ~finish
is a short-circuiting version of fold
. If f
returns Stop _
the computation ceases and results in that value. If f
returns Continue _
, the fold will proceed. If f
never 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
Returns true
if and only if the provided function evaluates to true
for all elements. This is a short-circuiting operation.
Returns the number of elements for which the provided function evaluates to true.
Returns the sum of f i
for all i
in the container.
val sum :
(module Base.Container.Summable with type t = 'sum) ->
'a t ->
f:('a -> 'sum) ->
'sum
Returns as an option
the first element for which f
evaluates to true.
Returns the first evaluation of f
that returns Some
, and returns None
if there is no such element.
Returns a minimum (resp maximum) element from the collection using the provided compare
function, or None
if the collection is empty. In case of a tie, the first element encountered while traversing the collection is returned. The implementation uses fold
so it has the same complexity as fold
.
include Core.Blit.S1 with type 'a t := 'a t
sort
uses constant heap space. To sort only part of the array, specify pos
to be the index to start sorting from and len
indicating how many elements to sort.
Grows the vec to the specified length if it is currently shorter. Sets all new indices to default
.
Equivalent to grow_to t (index + 1) ~default
.
Grows the vec to the specified length if it is currently shorter. Sets all new indices to default idx
.
Equivalent to grow_to' t (index + 1) ~default
.
Shortens the vec to the specified length if it is currently longer. Raises if len < 0
.
remove vec i
Removes the i-th element of the vector. This is not a fast implementation, and runs in O(N) time. (ie: it calls caml_modify under the hood)
Find the first element that satisfies f
. If exists, remove the element from the vector and return it. This is not a fast implementation, and runs in O(N) time.
The input vec is copied internally so that future modifications of it do not change the sequence.
The input vec is shared with the sequence and modifications of it will result in modification of the sequence.
take_while t ~f
returns a fresh vec containing the longest prefix of t
for which f
is true
.
clear_imm t
discards all elements from 'a t
in O(1) time if 'a
is immediate.
copy t
returns a copy of t
, that is, a fresh vec containing the same elements as t
.
exists t ~f
returns true if f
evaluates true on any element, else false
swap_to_last_and_pop t i
is equivalent to swap t i (length t - 1); pop_back_exn t
. It raises if i
is out of bounds.