ocaml-containers/2.3/containers/CCArray_slice/index.html
2018-08-06 11:54:50 -05:00

59 lines
No EOL
38 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCArray_slice (containers.CCArray_slice)</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> &mdash; <span class="package">package <a href="../index.html">containers</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">CCArray_slice</span></h1></header><h2>Array Slice</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">&#8209;&gt;</span> unit) <span class="keyword">&#8209;&gt;</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">&#8209;&gt;</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">&#8209;&gt;</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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</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">&#8209;&gt;</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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> unit</code><code></code></div><div class="doc"></div></div><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></code><code></code></div><div class="doc"><p>The type for an array slice, containing elements of type <code class="code">'a</code></p></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><code class="code">empty</code> is the empty array slice.</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">&#8209;&gt;</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><code class="code">equal eq as1 as2</code> is <code class="code">true</code> if the lengths of <code class="code">as1</code> and <code class="code">as2</code> are the same
and if the corresponding elements test equal using <code class="code">eq</code>.</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">&#8209;&gt;</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"><p><code class="code">compare cmp as1 as2</code> compares the two slices <code class="code">as1</code> and <code class="code">as2</code> using
the comparison function <code class="code">cmp</code>, element by element.</p></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">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">get as n</code> returns the element number <code class="code">n</code> of slice <code class="code">as</code>.
The first element has number 0.
The last element has number <code class="code">length as - 1</code>.
You can also write <code class="code">as.(n)</code> instead of <code class="code">get as n</code>.</p><p>Raise <code class="code">Invalid_argument &quot;index out of bounds&quot;</code>
if <code class="code">n</code> is outside the range 0 to <code class="code">(length as - 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">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option</code></div><div class="doc"><p><code class="code">get_safe as i</code> returns <code class="code">Some as.(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-make"><a href="#val-make" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>make : <span class="type-var">'a</span> array <span class="keyword">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> len:int <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">make a i ~len</code> creates a slice from given offset <code class="code">i</code> and length <code class="code">len</code> of the given array <code class="code">a</code>.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if the slice isn't valid.</li></ul></div></div><div class="spec val" id="val-of_slice"><a href="#val-of_slice" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>of_slice : (<span class="type-var">'a</span> array<span class="keyword"> * </span>int<span class="keyword"> * </span>int) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">of_slice (a, i, len)</code> makes a slice from a triple <code class="code">(a, i, len)</code> where <code class="code">a</code> is the array,
<code class="code">i</code> the offset in <code class="code">a</code>, and <code class="code">len</code> the number of elements of the slice.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if the slice isn't valid (See <a href="index.html#val-make">make</a>).</li></ul></div></div><div class="spec val" id="val-to_slice"><a href="#val-to_slice" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>to_slice : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> array<span class="keyword"> * </span>int<span class="keyword"> * </span>int</code></div><div class="doc"><p><code class="code">to_slice as</code> converts the slice <code class="code">as</code> into a triple <code class="code">(a, i, len)</code> where <code class="code">len</code> is the length of
the sub-array of <code class="code">a</code> starting at offset <code class="code">i</code>.</p></div></div><div class="spec val" id="val-to_list"><a href="#val-to_list" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>to_list : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> list</code></div><div class="doc"><p><code class="code">to_list as</code> converts the slice <code class="code">as</code> directly to a list.</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-full"><a href="#val-full" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>full : <span class="type-var">'a</span> array <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">full a</code> creates a slice that covers the full array <code class="code">a</code>.</p></div></div><div class="spec val" id="val-underlying"><a href="#val-underlying" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>underlying : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> array</code></div><div class="doc"><p><code class="code">underlying as</code> returns the underlying array (shared). Modifying this array will modify
the slice <code class="code">as</code>.</p></div></div><div class="spec val" id="val-copy"><a href="#val-copy" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>copy : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> array</code></div><div class="doc"><p><code class="code">copy as</code> copies the slice <code class="code">as</code> into a new array.</p></div></div><div class="spec val" id="val-sub"><a href="#val-sub" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>sub : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">sub as i len</code> builds a new sub-slice that contains the given subrange specified
by the index <code class="code">i</code> and the length <code class="code">len</code>.</p></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">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p><code class="code">set as n x</code> modifies the slice <code class="code">as</code> in place, replacing
element number <code class="code">n</code> with <code class="code">x</code>.
You can also write <code class="code">as.(n) &lt;- x</code> instead of <code class="code">set as n x</code>.</p><p>Raise <code class="code">Invalid_argument &quot;index out of bounds&quot;</code>
if <code class="code">n</code> is outside the range 0 to <code class="code">length as - 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">&#8209;&gt;</span> int</code></div><div class="doc"><p><code class="code">length as</code> returns the length (number of elements) of the given slice <code class="code">as</code>.</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">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">fold f acc as</code> computes <code class="code">f (... (f (f acc as.(0)) as.(1)) ...) as.(length as - 1)</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">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">foldi f acc as</code> is just like <a href="index.html#val-fold">fold</a> but it also passes in the index of each element
as the second argument to the folded function <code class="code">f</code>.</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">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span><span class="keyword"> * </span>[ `Stop | `Continue ]) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">fold_while f acc as</code> folds left on slice <code class="code">as</code> 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-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">&#8209;&gt;</span> unit) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p><code class="code">iter f as</code> applies function <code class="code">f</code> in turn to all elements of <code class="code">as</code>.
It is equivalent to <code class="code">f as.(0); f as.(1); ...; f as.(length as - 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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> unit) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p><code class="code">iteri f as</code> is like <a href="index.html#val-iter">iter</a>, but the function <code class="code">f</code> is applied with 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">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p><code class="code">blit as1 o1 as2 o2 len</code> copies <code class="code">len</code> elements
from slice <code class="code">as1</code>, starting at element number <code class="code">o1</code>, to slice <code class="code">as2</code>,
starting at element number <code class="code">o2</code>. It works correctly even if
<code class="code">as1</code> and <code class="code">as2</code> are the same slice, and the source and
destination chunks overlap.</p><p>Raise <code class="code">Invalid_argument &quot;CCArray_slice.blit&quot;</code> if <code class="code">o1</code> and <code class="code">len</code> do not
designate a valid subarray of <code class="code">as1</code>, or if <code class="code">o2</code> and <code class="code">len</code> do not
designate a valid subarray of <code class="code">as2</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">&#8209;&gt;</span> unit</code></div><div class="doc"><p><code class="code">reverse_in_place as</code> reverses the slice <code class="code">as</code> 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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> int) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> array</code></div><div class="doc"><p><code class="code">sorted cmp as</code> makes a copy of <code class="code">as</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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> int) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> int array</code></div><div class="doc"><p><code class="code">sort_indices cmp as</code> returns a new array <code class="code">b</code>, with the same length as <code class="code">as</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 as</code>
appears in <code class="code">as</code>. <code class="code">as</code> is not modified.</p><p>In other words, <code class="code">map (fun i -&gt; as.(i)) (sort_indices cmp as) = sorted cmp as</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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> int) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> int array</code></div><div class="doc"><p><code class="code">sort_ranking cmp as</code> returns a new array <code class="code">b</code>, with the same length as <code class="code">as</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">as</code> appears
in <code class="code">sorted cmp as</code>. <code class="code">as</code> is not modified.</p><p>In other words, <code class="code">map (fun i -&gt; (sorted cmp as).(i)) (sort_ranking cmp as) = as</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">as</code>, we also have
<code class="code">lookup_exn as.(i) (sorted as) = (sorted_ranking as).(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"><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">&#8209;&gt;</span> <span class="type-var">'b</span> option) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> option</code></div><div class="doc"><p><code class="code">find f as</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>. Otherwise returns <code class="code">None</code>.</p></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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> option) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> option</code></div><div class="doc"><p><code class="code">findi f as</code> is like <a href="index.html#val-find">find</a>, but the index of the element is also passed
to the predicate function <code class="code">f</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-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">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</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 as</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">as</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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> int option</code></div><div class="doc"><p><code class="code">lookup ~cmp x as</code> lookups the index <code class="code">i</code> of some key <code class="code">x</code> in the slice <code class="code">as</code>, provided <code class="code">as</code> is
sorted using <code class="code">cmp</code>.</p><ul class="at-tag"><li><span class="at-tag return">Returns</span> <code class="code">None</code> if the key <code class="code">x</code> 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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"><p><code class="code">lookup_exn ~cmp x as</code> is 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 <code class="code">x</code> 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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> int) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</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 as</code> finds the index of the object <code class="code">x</code> in the slice <code class="code">as</code>,
provided <code class="code">as</code> is <b>sorted</b> using <code class="code">cmp</code>. If the slice is not sorted,
the result is not specified (may raise Invalid_argument).</p><p>Complexity: <code class="code">O(log n)</code> where n is the length of the slice <code class="code">as</code>
(dichotomic search).</p><ul class="at-tag"><li><p><span class="at-tag return">Returns</span> </p><ul><li><code class="code">`At i</code> if <code class="code">cmp as.(i) x = 0</code> (for some i).</li><li><code class="code">`All_lower</code> if all elements of <code class="code">as</code> are lower than <code class="code">x</code>.</li><li><code class="code">`All_bigger</code> if all elements of <code class="code">as</code> are bigger than <code class="code">x</code>.</li><li><code class="code">`Just_after i</code> if <code class="code">as.(i) &lt; x &lt; as.(i+1)</code>.</li><li><code class="code">`Empty</code> if the slice <code class="code">as</code> is empty.</li></ul></li><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if the slice 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">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p><code class="code">for_all p [|as1; ...; asn|]</code> checks if all elements of the slice
satisfy the predicate <code class="code">p</code>. That is, it returns
<code class="code">(p as1) &amp;&amp; (p as2) &amp;&amp; ... &amp;&amp; (p asn)</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">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p><code class="code">for_all2 p [|as1; ...; asn|] [|bs1; ...; bsn|]</code> is <code class="code">true</code> if each pair of elements <code class="code">asi bsi</code>
satisfies the predicate <code class="code">p</code>.
That is, it returns <code class="code">(p as1 bs1) &amp;&amp; (p as2 bs2) &amp;&amp; ... &amp;&amp; (p asn bsn)</code>.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if slices 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">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p><code class="code">exists p [|as1; ...; asn|]</code> is <code class="code">true</code> if at least one element of
the slice satisfies the predicate <code class="code">p</code>. That is, it returns
<code class="code">(p as1) || (p as2) || ... || (p asn)</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">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> bool) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p><code class="code">exists2 p [|as1; ...; asn|] [|bs1; ...; bsn|]</code> is <code class="code">true</code> if any pair of elements <code class="code">asi bsi</code>
satisfies the predicate <code class="code">p</code>.
That is, it returns <code class="code">(p as1 bs1) || (p as2 bs2) || ... || (p asn bsn)</code>.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if slices 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">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'acc</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'acc</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'acc</span></code></div><div class="doc"><p><code class="code">fold2 f acc as bs</code> fold on two slices <code class="code">as</code> and <code class="code">bs</code> stepwise.
It computes <code class="code">f (... (f acc as1 bs1)...) asn bsn</code>.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if slices 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">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> unit) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p><code class="code">iter2 f as bs</code> iterates on the two slices <code class="code">as</code> and <code class="code">bs</code> stepwise.
It is equivalent to <code class="code">f as0 bs0; ...; f as.(length as - 1) bs.(length bs - 1); ()</code>.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if slices 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">&#8209;&gt;</span> unit</code></div><div class="doc"><p><code class="code">shuffle as</code> randomly shuffles the slice <code class="code">as</code>, 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">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p><code class="code">shuffle_with rs as</code> randomly shuffles the slice <code class="code">as</code> (like <a href="index.html#val-shuffle">shuffle</a>) but a specialized random
state <code class="code">rs</code> is used to control the random numbers being produced during shuffling (for reproducibility).</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">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-random_gen">random_gen</a></code></div><div class="doc"><p><code class="code">random_choose as rs</code> randomly chooses an element of <code class="code">as</code>.</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">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-sequence">sequence</a></code></div><div class="doc"><p><code class="code">to_seq as</code> returns a <code class="code">sequence</code> of the elements of a slice <code class="code">as</code>.
The input slice <code class="code">as</code> is shared with the sequence and modification 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">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-gen">gen</a></code></div><div class="doc"><p><code class="code">to_gen as</code> returns a <code class="code">gen</code> of the elements of a slice <code class="code">as</code>.</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">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-klist">klist</a></code></div><div class="doc"><p><code class="code">to_klist as</code> returns a <code class="code">klist</code> of the elements of a slice <code class="code">as</code>.</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 : ?&#8288;sep:string <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-printer">printer</a> <span class="keyword">&#8209;&gt;</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><code class="code">pp ~sep pp_item ppf as</code> formats the slice <code class="code">as</code> on <code class="code">ppf</code>.
Each element is formatted with <code class="code">pp_item</code> and elements are separated
by <code class="code">sep</code> (defaults to &quot;, &quot;).</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 : ?&#8288;sep:string <span class="keyword">&#8209;&gt;</span> (int <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-printer">printer</a>) <span class="keyword">&#8209;&gt;</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><code class="code">pp_i ~sep pp_item ppf as</code> prints the slice <code class="code">as</code> on <code class="code">ppf</code>.
The printing function <code class="code">pp_item</code> is giving both index and element.
Elements are separated by <code class="code">sep</code> (defaults to &quot;, &quot;).</p></div></div></body></html>