mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
53 lines
No EOL
45 KiB
HTML
53 lines
No EOL
45 KiB
HTML
<!DOCTYPE html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCArray (containers.CCArray)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><meta name="generator" content="doc-ock-html v1.0.0-1-g1fc9bf0"/></head><body><nav id="top"><a href="../index.html">Up</a> — <span class="package">package <a href="../index.html">containers</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">CCArray</span></h1></header><h2>Array utils</h2><div class="spec type" id="type-sequence"><a href="#type-sequence" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a sequence</code><code><span class="keyword"> = </span>(<span class="type-var">'a</span> <span class="keyword">‑></span> unit) <span class="keyword">‑></span> unit</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-klist"><a href="#type-klist" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a klist</code><code><span class="keyword"> = </span>unit <span class="keyword">‑></span> [ `Nil | `Cons of <span class="type-var">'a</span><span class="keyword"> * </span><span class="type-var">'a</span> <a href="index.html#type-klist">klist</a> ]</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-gen"><a href="#type-gen" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a gen</code><code><span class="keyword"> = </span>unit <span class="keyword">‑></span> <span class="type-var">'a</span> option</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-equal"><a href="#type-equal" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a equal</code><code><span class="keyword"> = </span><span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> bool</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-ord"><a href="#type-ord" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a ord</code><code><span class="keyword"> = </span><span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> int</code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-random_gen"><a href="#type-random_gen" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a random_gen</code><code><span class="keyword"> = </span>Random.State.t <span class="keyword">‑></span> <span class="type-var">'a</span></code><code></code></div><div class="doc"></div></div><div class="spec type" id="type-printer"><a href="#type-printer" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a printer</code><code><span class="keyword"> = </span>Format.formatter <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> unit</code><code></code></div><div class="doc"></div></div><h3>Arrays</h3><div class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>'a t</code><code><span class="keyword"> = </span><span class="type-var">'a</span> array</code><code></code></div><div class="doc"></div></div><div class="spec val" id="val-empty"><a href="#val-empty" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>empty : <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>The empty array, physically equal to <code class="code">||</code>.</p></div></div><div class="spec val" id="val-equal"><a href="#val-equal" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>equal : <span class="type-var">'a</span> <a href="index.html#type-equal">equal</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <a href="index.html#type-equal">equal</a></code></div><div class="doc"><p>Hoist an equality test for elements to arrays.
|
|
Arrays are only equal if their lengths are the same and
|
|
corresponding elements test equal.</p></div></div><div class="spec val" id="val-compare"><a href="#val-compare" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare : <span class="type-var">'a</span> <a href="index.html#type-ord">ord</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <a href="index.html#type-ord">ord</a></code></div><div class="doc"></div></div><div class="spec val" id="val-swap"><a href="#val-swap" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>swap : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int <span class="keyword">‑></span> int <span class="keyword">‑></span> unit</code></div><div class="doc"><p><code class="code">swap arr i j</code> swaps elements at indices <code class="code">i</code> and <code class="code">j</code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.4</li></ul></div></div><div class="spec val" id="val-get"><a href="#val-get" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">get a n</code> returns the element number <code class="code">n</code> of array <code class="code">a</code>.
|
|
The first element has number 0.
|
|
The last element has number <code class="code">length a - 1</code>.
|
|
You can also write <code class="code">a.(n)</code> instead of <code class="code">get a n</code>.</p><p>Raise <code class="code">Invalid_argument "index out of bounds"</code>
|
|
if <code class="code">n</code> is outside the range 0 to <code class="code">(length a - 1)</code>.</p></div></div><div class="spec val" id="val-get_safe"><a href="#val-get_safe" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_safe : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int <span class="keyword">‑></span> <span class="type-var">'a</span> option</code></div><div class="doc"><p><code class="code">get_safe a i</code> returns <code class="code">Some a.(i)</code> if <code class="code">i</code> is a valid index.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.18</li></ul></div></div><div class="spec val" id="val-set"><a href="#val-set" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>set : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> unit</code></div><div class="doc"><p><code class="code">set a n x</code> modifies array <code class="code">a</code> in place, replacing
|
|
element number <code class="code">n</code> with <code class="code">x</code>.
|
|
You can also write <code class="code">a.(n) <- x</code> instead of <code class="code">set a n x</code>.</p><p>Raise <code class="code">Invalid_argument "index out of bounds"</code>
|
|
if <code class="code">n</code> is outside the range 0 to <code class="code">length a - 1</code>.</p></div></div><div class="spec val" id="val-length"><a href="#val-length" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>length : <span class="type-var">_</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int</code></div><div class="doc"><p>Return the length (number of elements) of the given array.</p></div></div><div class="spec val" id="val-fold"><a href="#val-fold" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fold : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">fold f x a</code> computes <code class="code">f (... (f (f x a.(0)) a.(1)) ...) a.(n-1)</code>,
|
|
where <code class="code">n</code> is the length of the array <code class="code">a</code>.</p></div></div><div class="spec val" id="val-foldi"><a href="#val-foldi" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>foldi : (<span class="type-var">'a</span> <span class="keyword">‑></span> int <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Fold left on array, with index.</p></div></div><div class="spec val" id="val-fold_while"><a href="#val-fold_while" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fold_while : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'a</span><span class="keyword"> * </span>[ `Stop | `Continue ]) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p>Fold left on array until a stop condition via <code class="code">('a, `Stop)</code> is
|
|
indicated by the accumulator.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.8</li></ul></div></div><div class="spec val" id="val-fold_map"><a href="#val-fold_map" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fold_map : (<span class="type-var">'acc</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'acc</span><span class="keyword"> * </span><span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'acc</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'acc</span><span class="keyword"> * </span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">fold_map f acc a</code> is a <code class="code">fold_left</code>-like function, but it also maps the
|
|
array to another array.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.2</li></ul></div></div><div class="spec val" id="val-scan_left"><a href="#val-scan_left" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>scan_left : (<span class="type-var">'acc</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'acc</span>) <span class="keyword">‑></span> <span class="type-var">'acc</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'acc</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">scan_left f acc a</code> returns the array
|
|
<code class="code"> [|acc; f acc x0; f (f acc a.(0)) a.(1); …|] </code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.2</li></ul></div></div><div class="spec val" id="val-iter"><a href="#val-iter" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>iter : (<span class="type-var">'a</span> <span class="keyword">‑></span> unit) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> unit</code></div><div class="doc"><p><code class="code">iter f a</code> applies function <code class="code">f</code> in turn to all
|
|
the elements of <code class="code">a</code>. It is equivalent to
|
|
<code class="code">f a.(0); f a.(1); ...; f a.(length a - 1); ()</code>.</p></div></div><div class="spec val" id="val-iteri"><a href="#val-iteri" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>iteri : (int <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> unit) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> unit</code></div><div class="doc"><p>Like <span class="xref-unresolved" title="unresolved reference to "Array.iter"">Array.iter</span>, but the function is applied to the index of the
|
|
element as first argument, and the element itself as second argument.</p></div></div><div class="spec val" id="val-blit"><a href="#val-blit" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>blit : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int <span class="keyword">‑></span> int <span class="keyword">‑></span> unit</code></div><div class="doc"><p><code class="code">blit v1 o1 v2 o2 len</code> copies <code class="code">len</code> elements
|
|
from array <code class="code">v1</code>, starting at element number <code class="code">o1</code>, to array <code class="code">v2</code>,
|
|
starting at element number <code class="code">o2</code>. It works correctly even if
|
|
<code class="code">v1</code> and <code class="code">v2</code> are the same array, and the source and
|
|
destination chunks overlap.</p><p>Raise <code class="code">Invalid_argument "Array.blit"</code> if <code class="code">o1</code> and <code class="code">len</code> do not
|
|
designate a valid subarray of <code class="code">v1</code>, or if <code class="code">o2</code> and <code class="code">len</code> do not
|
|
designate a valid subarray of <code class="code">v2</code>.</p></div></div><div class="spec val" id="val-reverse_in_place"><a href="#val-reverse_in_place" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>reverse_in_place : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> unit</code></div><div class="doc"><p>Reverse the array in place.</p></div></div><div class="spec val" id="val-sorted"><a href="#val-sorted" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>sorted : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> int) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'a</span> array</code></div><div class="doc"><p><code class="code">sorted cmp a</code> makes a copy of <code class="code">a</code> and sorts it with <code class="code">cmp</code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.0</li></ul></div></div><div class="spec val" id="val-sort_indices"><a href="#val-sort_indices" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>sort_indices : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> int) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int array</code></div><div class="doc"><p><code class="code">sort_indices cmp a</code> returns a new array <code class="code">b</code>, with the same length as <code class="code">a</code>,
|
|
such that <code class="code">b.(i)</code> is the index at which the <code class="code">i</code>-th element of <code class="code">sorted cmp a</code>
|
|
appears in <code class="code">a</code>. <code class="code">a</code> is not modified.</p><p>In other words, <code class="code">map (fun i -> a.(i)) (sort_indices cmp a) = sorted cmp a</code>.
|
|
<code class="code">sort_indices</code> yields the inverse permutation of <a href="index.html#val-sort_ranking">sort_ranking</a>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.0</li></ul></div></div><div class="spec val" id="val-sort_ranking"><a href="#val-sort_ranking" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>sort_ranking : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> int) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int array</code></div><div class="doc"><p><code class="code">sort_ranking cmp a</code> returns a new array <code class="code">b</code>, with the same length as <code class="code">a</code>,
|
|
such that <code class="code">b.(i)</code> is the index at which the <code class="code">i</code>-the element of <code class="code">a</code> appears
|
|
in <code class="code">sorted cmp a</code>. <code class="code">a</code> is not modified.</p><p>In other words, <code class="code">map (fun i -> (sorted cmp a).(i)) (sort_ranking cmp a) = a</code>.
|
|
<code class="code">sort_ranking</code> yields the inverse permutation of <a href="index.html#val-sort_indices">sort_indices</a>.</p><p>In the absence of duplicate elements in <code class="code">a</code>, we also have
|
|
<code class="code">lookup_exn a.(i) (sorted a) = (sorted_ranking a).(i)</code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.0</li></ul></div></div><div class="spec val" id="val-find_map"><a href="#val-find_map" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>find_map : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> option) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> option</code></div><div class="doc"><p><code class="code">find_map f a</code> returns <code class="code">Some y</code> if there is an element <code class="code">x</code> such
|
|
that <code class="code">f x = Some y</code>, else it returns <code class="code">None</code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.3</li></ul></div></div><div class="spec val" id="val-find"><a href="#val-find" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>find : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> option) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> option</code></div><div class="doc"><p>Alias to <a href="index.html#val-find_map">find_map</a>.</p><ul class="at-tag"><li><span class="at-tag deprecated">Deprecated</span> since 1.3</li></ul></div></div><div class="spec val" id="val-find_map_i"><a href="#val-find_map_i" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>find_map_i : (int <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> option) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> option</code></div><div class="doc"><p>Like <a href="index.html#val-find_map">find_map</a>, but also pass the index to the predicate function.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 1.3</li></ul></div></div><div class="spec val" id="val-findi"><a href="#val-findi" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>findi : (int <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> option) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> option</code></div><div class="doc"><p>Alias to <a href="index.html#val-find_map_i">find_map_i</a>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.3.4</li><li><span class="at-tag deprecated">Deprecated</span> since 1.3</li></ul></div></div><div class="spec val" id="val-find_idx"><a href="#val-find_idx" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>find_idx : (<span class="type-var">'a</span> <span class="keyword">‑></span> bool) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> (int<span class="keyword"> * </span><span class="type-var">'a</span>) option</code></div><div class="doc"><p><code class="code">find_idx p x</code> returns <code class="code">Some (i,x)</code> where <code class="code">x</code> is the <code class="code">i</code>-th element of <code class="code">l</code>,
|
|
and <code class="code">p x</code> holds. Otherwise returns <code class="code">None</code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.3.4</li></ul></div></div><div class="spec val" id="val-lookup"><a href="#val-lookup" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>lookup : cmp:<span class="type-var">'a</span> <a href="index.html#type-ord">ord</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int option</code></div><div class="doc"><p>Lookup the index of some value in a sorted array.
|
|
Undefined behavior if the array is not sorted wrt <code class="code">cmp</code>.
|
|
Complexity: <code class="code">O(log (n))</code> (dichotomic search).</p><ul class="at-tag"><li><span class="at-tag return">Returns</span> <code class="code">None</code> if the key is not present, or
|
|
<code class="code">Some i</code> (<code class="code">i</code> the index of the key) otherwise.</li></ul></div></div><div class="spec val" id="val-lookup_exn"><a href="#val-lookup_exn" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>lookup_exn : cmp:<span class="type-var">'a</span> <a href="index.html#type-ord">ord</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int</code></div><div class="doc"><p>Like <a href="index.html#val-lookup">lookup</a>, but</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Not_found</span>: if the key is not present.</li></ul></div></div><div class="spec val" id="val-bsearch"><a href="#val-bsearch" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>bsearch : cmp:(<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> int) <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> [ `All_lower | `All_bigger | `Just_after of int | `Empty | `At of int ]</code></div><div class="doc"><p><code class="code">bsearch ?cmp x arr</code> finds the index of the object <code class="code">x</code> in the array <code class="code">arr</code>,
|
|
provided <code class="code">arr</code> is <b>sorted</b> using <code class="code">cmp</code>. If the array is not sorted,
|
|
the result is not specified (may</p><ul class="at-tag"><li><p><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: ).</p><p>Complexity: <code class="code">O(log n)</code> where n is the length of the array
|
|
(dichotomic search).</p></li><li><p><span class="at-tag return">Returns</span> </p><ul><li><code class="code">`At i</code> if <code class="code">cmp arr.(i) x = 0</code> (for some i).</li><li><code class="code">`All_lower</code> if all elements of <code class="code">arr</code> are lower than <code class="code">x</code>.</li><li><code class="code">`All_bigger</code> if all elements of <code class="code">arr</code> are bigger than <code class="code">x</code>.</li><li><code class="code">`Just_after i</code> if <code class="code">arr.(i) < x < arr.(i+1)</code>.</li><li><code class="code">`Empty</code> if the array is empty.</li></ul></li><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if the array is found to be unsorted w.r.t <code class="code">cmp</code>.</li><li><span class="at-tag since">Since</span>: 0.13</li></ul></div></div><div class="spec val" id="val-for_all"><a href="#val-for_all" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>for_all : (<span class="type-var">'a</span> <span class="keyword">‑></span> bool) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> bool</code></div><div class="doc"><p><code class="code">for_all p [|a1; ...; an|]</code> checks if all elements of the array
|
|
satisfy the predicate <code class="code">p</code>. That is, it returns
|
|
<code class="code">(p a1) && (p a2) && ... && (p an)</code>.</p></div></div><div class="spec val" id="val-for_all2"><a href="#val-for_all2" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>for_all2 : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> bool) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> bool</code></div><div class="doc"><p>Forall on pairs of arrays.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if they have distinct lengths.
|
|
Allow different types.</li><li><span class="at-tag since">Since</span>: 0.20</li></ul></div></div><div class="spec val" id="val-exists"><a href="#val-exists" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>exists : (<span class="type-var">'a</span> <span class="keyword">‑></span> bool) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> bool</code></div><div class="doc"><p><code class="code">exists p [|a1; ...; an|]</code> checks if at least one element of
|
|
the array satisfies the predicate <code class="code">p</code>. That is, it returns
|
|
<code class="code">(p a1) || (p a2) || ... || (p an)</code>.</p></div></div><div class="spec val" id="val-exists2"><a href="#val-exists2" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>exists2 : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> bool) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> bool</code></div><div class="doc"><p>Exists on pairs of arrays.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if they have distinct lengths.
|
|
Allow different types.</li><li><span class="at-tag since">Since</span>: 0.20</li></ul></div></div><div class="spec val" id="val-fold2"><a href="#val-fold2" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fold2 : (<span class="type-var">'acc</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'acc</span>) <span class="keyword">‑></span> <span class="type-var">'acc</span> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'acc</span></code></div><div class="doc"><p>Fold on two arrays stepwise.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if they have distinct lengths.</li><li><span class="at-tag since">Since</span>: 0.20</li></ul></div></div><div class="spec val" id="val-iter2"><a href="#val-iter2" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>iter2 : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> unit) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> unit</code></div><div class="doc"><p>Iterate on two arrays stepwise.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if they have distinct lengths.</li><li><span class="at-tag since">Since</span>: 0.20</li></ul></div></div><div class="spec val" id="val-shuffle"><a href="#val-shuffle" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>shuffle : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> unit</code></div><div class="doc"><p>Shuffle randomly the array, in place.</p></div></div><div class="spec val" id="val-shuffle_with"><a href="#val-shuffle_with" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>shuffle_with : Random.State.t <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> unit</code></div><div class="doc"><p>Like <a href="index.html#val-shuffle">shuffle</a> but using a specialized random state.</p></div></div><div class="spec val" id="val-random_choose"><a href="#val-random_choose" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>random_choose : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-random_gen">random_gen</a></code></div><div class="doc"><p>Choose an element randomly.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Not_found</span>: if the array/slice is empty.</li></ul></div></div><div class="spec val" id="val-to_seq"><a href="#val-to_seq" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>to_seq : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-sequence">sequence</a></code></div><div class="doc"><p>Return a <code class="code">sequence</code> of the elements of an array.
|
|
The input array is shared with the sequence and modifications of it will result
|
|
in modification of the sequence.</p></div></div><div class="spec val" id="val-to_gen"><a href="#val-to_gen" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>to_gen : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-gen">gen</a></code></div><div class="doc"><p>Return a <code class="code">gen</code> of the elements of an array.</p></div></div><div class="spec val" id="val-to_klist"><a href="#val-to_klist" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>to_klist : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-klist">klist</a></code></div><div class="doc"><p>Return a <code class="code">klist</code> of the elements of an array.</p></div></div><h3>IO</h3><div class="spec val" id="val-pp"><a href="#val-pp" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pp : ?⁠sep:string <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-printer">printer</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <a href="index.html#type-printer">printer</a></code></div><div class="doc"><p>Print an array of items with printing function.</p></div></div><div class="spec val" id="val-pp_i"><a href="#val-pp_i" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pp_i : ?⁠sep:string <span class="keyword">‑></span> (int <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-printer">printer</a>) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <a href="index.html#type-printer">printer</a></code></div><div class="doc"><p>Print an array, giving the printing function both index and item.</p></div></div><div class="spec val" id="val-map"><a href="#val-map" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>map : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">map f a</code> applies function <code class="code">f</code> to all the elements of <code class="code">a</code>,
|
|
and builds an array with the results returned by <code class="code">f</code>:
|
|
<code class="code">[| f a.(0); f a.(1); ...; f a.(length a - 1) |]</code>.</p></div></div><div class="spec val" id="val-map2"><a href="#val-map2" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>map2 : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <span class="keyword">‑></span> <span class="type-var">'c</span>) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'c</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">map2 f a b</code> applies function <code class="code">f</code> to all the elements of <code class="code">a</code> and <code class="code">b</code>,
|
|
and builds an array with the results returned by <code class="code">f</code>:
|
|
<code class="code">[| f a.(0) b.(0); ...; f a.(length a - 1) b.(length b - 1)|]</code>.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if they have distinct lengths.</li><li><span class="at-tag since">Since</span>: 0.20</li></ul></div></div><div class="spec val" id="val-rev"><a href="#val-rev" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>rev : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Copy + reverse in place.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.20</li></ul></div></div><div class="spec val" id="val-filter"><a href="#val-filter" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>filter : (<span class="type-var">'a</span> <span class="keyword">‑></span> bool) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Filter elements out of the array. Only the elements satisfying
|
|
the given predicate will be kept.</p></div></div><div class="spec val" id="val-filter_map"><a href="#val-filter_map" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>filter_map : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> option) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Map each element into another value, or discard it.</p></div></div><div class="spec val" id="val-flat_map"><a href="#val-flat_map" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>flat_map : (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a>) <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> <span class="type-var">'b</span> array</code></div><div class="doc"><p>Transform each element into an array, then flatten.</p></div></div><div class="spec val" id="val-(>>=)"><a href="#val-(>>=)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(>>=) : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a>) <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Infix version of <a href="index.html#val-flat_map">flat_map</a>.</p></div></div><div class="spec val" id="val-(>>|)"><a href="#val-(>>|)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(>>|) : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Infix version of <a href="index.html#val-map">map</a>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.8</li></ul></div></div><div class="spec val" id="val-(>|=)"><a href="#val-(>|=)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(>|=) : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> (<span class="type-var">'a</span> <span class="keyword">‑></span> <span class="type-var">'b</span>) <span class="keyword">‑></span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Infix version of <a href="index.html#val-map">map</a>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.8</li></ul></div></div><div class="spec val" id="val-except_idx"><a href="#val-except_idx" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>except_idx : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int <span class="keyword">‑></span> <span class="type-var">'a</span> list</code></div><div class="doc"><p>Remove given index, obtaining the list of the other elements.</p></div></div><div class="spec val" id="val-(--)"><a href="#val-(--)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(--) : int <span class="keyword">‑></span> int <span class="keyword">‑></span> int <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Range array. Bounds included.</p></div></div><div class="spec val" id="val-(--^)"><a href="#val-(--^)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(--^) : int <span class="keyword">‑></span> int <span class="keyword">‑></span> int <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Range array, excluding right bound.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.17</li></ul></div></div><div class="spec val" id="val-random"><a href="#val-random" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>random : <span class="type-var">'a</span> <a href="index.html#type-random_gen">random_gen</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <a href="index.html#type-random_gen">random_gen</a></code></div><div class="doc"></div></div><div class="spec val" id="val-random_non_empty"><a href="#val-random_non_empty" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>random_non_empty : <span class="type-var">'a</span> <a href="index.html#type-random_gen">random_gen</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <a href="index.html#type-random_gen">random_gen</a></code></div><div class="doc"></div></div><div class="spec val" id="val-random_len"><a href="#val-random_len" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>random_len : int <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-random_gen">random_gen</a> <span class="keyword">‑></span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <a href="index.html#type-random_gen">random_gen</a></code></div><div class="doc"></div></div><h3>Generic Functions</h3><div class="spec module-type" id="module-type-MONO_ARRAY"><a href="#module-type-MONO_ARRAY" class="anchor"></a><div class="def module-type"><code><span class="keyword">module type </span><a href="module-type-MONO_ARRAY/index.html">MONO_ARRAY</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"></div></div><div class="spec val" id="val-sort_generic"><a href="#val-sort_generic" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>sort_generic : (<span class="keyword">module </span><a href="module-type-MONO_ARRAY/index.html">MONO_ARRAY</a> <span class="keyword">with</span> <span class="keyword">type </span><a href="module-type-MONO_ARRAY/index.html#type-elt">elt</a> <span class="keyword">=</span> <span class="type-var">'elt</span><span class="keyword"> and </span><span class="keyword">type </span><a href="module-type-MONO_ARRAY/index.html#type-t">t</a> <span class="keyword">=</span> <span class="type-var">'arr</span>) <span class="keyword">‑></span> cmp:(<span class="type-var">'elt</span> <span class="keyword">‑></span> <span class="type-var">'elt</span> <span class="keyword">‑></span> int) <span class="keyword">‑></span> <span class="type-var">'arr</span> <span class="keyword">‑></span> unit</code></div><div class="doc"><p>Sort the array, without allocating (eats stack space though). Performance
|
|
might be lower than <span class="xref-unresolved" title="unresolved reference to "Array.sort"">Array.sort</span>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.14</li></ul></div></div></body></html> |