ocaml-containers/2.2/containers/CCRandom/index.html
2018-05-10 23:14:25 -05:00

23 lines
No EOL
23 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCRandom (containers.CCRandom)</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">CCRandom</span></h1></header><h2>Random Generators</h2><div class="spec include"><div class="doc"></div><details open="open"><summary><span class="def"><code><span class="keyword">include </span><span class="keyword">module type of </span><span class="keyword">sig</span> ... <span class="keyword">end</span></code></span></summary><div class="spec val" id="val-init"><a href="#val-init" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>init : int <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"></div></div><div class="spec val" id="val-full_init"><a href="#val-full_init" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>full_init : int array <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"></div></div><div class="spec val" id="val-self_init"><a href="#val-self_init" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>self_init : unit <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"></div></div><div class="spec val" id="val-bits"><a href="#val-bits" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>bits : unit <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div><div class="spec val" id="val-int"><a href="#val-int" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>int : int <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div><div class="spec val" id="val-int32"><a href="#val-int32" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>int32 : Int32.t <span class="keyword">&#8209;&gt;</span> Int32.t</code></div><div class="doc"></div></div><div class="spec val" id="val-nativeint"><a href="#val-nativeint" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>nativeint : Nativeint.t <span class="keyword">&#8209;&gt;</span> Nativeint.t</code></div><div class="doc"></div></div><div class="spec val" id="val-int64"><a href="#val-int64" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>int64 : Int64.t <span class="keyword">&#8209;&gt;</span> Int64.t</code></div><div class="doc"></div></div><div class="spec val" id="val-float"><a href="#val-float" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>float : float <span class="keyword">&#8209;&gt;</span> float</code></div><div class="doc"></div></div><div class="spec val" id="val-bool"><a href="#val-bool" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>bool : unit <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec module" id="module-State"><a href="#module-State" class="anchor"></a><div class="def module"><code><span class="keyword">module </span>State = Random.State</code></div><div class="doc"></div></div><div class="spec val" id="val-get_state"><a href="#val-get_state" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_state : unit <span class="keyword">&#8209;&gt;</span> <a href="index.html#module-State">State</a>.t</code></div><div class="doc"></div></div><div class="spec val" id="val-set_state"><a href="#val-set_state" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>set_state : <a href="index.html#module-State">State</a>.t <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"></div></div></details></div><div class="spec type" id="type-state"><a href="#type-state" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>state</code><code><span class="keyword"> = </span>Random.State.t</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><span class="keyword"> = </span><a href="index.html#type-state">state</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span></code><code></code></div><div class="doc"><p>Random generator for values of type <code class="code">'a</code>.</p></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><span class="type-var">'a</span> <a href="index.html#type-t">t</a></code><code></code></div><div class="doc"></div></div><div class="spec val" id="val-return"><a href="#val-return" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>return : <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></code></div><div class="doc"><p><code class="code">return x</code> is the generator that always returns <code class="code">x</code>.
Example: <code class="code">let random_int = return 4 (* fair dice roll *)</code>.</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">&#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> <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></code></div><div class="doc"><p><code class="code">flat_map f g st</code> is <code class="code">f (g st) st</code>.</p></div></div><div class="spec val" id="val-(&gt;&gt;=)"><a href="#val-(&gt;&gt;=)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(&gt;&gt;=) : <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> <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">'b</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Monadic <code class="code">bind</code>.</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">&#8209;&gt;</span> <span class="type-var">'b</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></code></div><div class="doc"><p><code class="code">map f g st</code> is <code class="code">f (g st)</code>.</p></div></div><div class="spec val" id="val-(&gt;|=)"><a href="#val-(&gt;|=)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(&gt;|=) : <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> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <a href="index.html#type-t">t</a></code></div><div class="doc"></div></div><div class="spec val" id="val-delay"><a href="#val-delay" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>delay : (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">'a</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Delay evaluation. Useful for side-effectful generators that
need some code to run for every call.
Example:
</p><pre><code class="code"> let gensym = let r = ref 0 in fun () -&gt; incr r; !r ;;
delay (fun () -&gt;
let name = gensym() in
small_int &gt;&gt;= fun i -&gt; return (name,i)
)</code></pre><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.4</li></ul></div></div><div class="spec val" id="val-choose"><a href="#val-choose" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>choose : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> list <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Choose a generator within the list.</p></div></div><div class="spec val" id="val-choose_exn"><a href="#val-choose_exn" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>choose_exn : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> list <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>Like <a href="index.html#val-choose">choose</a> but without option.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if the list is empty.</li></ul></div></div><div class="spec val" id="val-choose_array"><a href="#val-choose_array" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>choose_array : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> array <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Choose a generator within the array.</p></div></div><div class="spec val" id="val-choose_return"><a href="#val-choose_return" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>choose_return : <span class="type-var">'a</span> list <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>Choose among the list.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if the list is empty.</li></ul></div></div><div class="spec val" id="val-replicate"><a href="#val-replicate" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>replicate : 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> list <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">replicate n g</code> makes a list of <code class="code">n</code> elements which are all generated
randomly using <code class="code">g</code>.</p></div></div><div class="spec val" id="val-sample_without_replacement"><a href="#val-sample_without_replacement" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>sample_without_replacement : compare:(<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> 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> list <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">sample_without_replacement n g</code> makes a list of <code class="code">n</code> elements which are all
generated randomly using <code class="code">g</code> with the added constraint that none of the generated
random values are equal.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if <code class="code">n &lt;= 0</code>.</li><li><span class="at-tag since">Since</span>: 0.15</li></ul></div></div><div class="spec val" id="val-list_seq"><a href="#val-list_seq" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>list_seq : <span class="type-var">'a</span> <a href="index.html#type-t">t</a> list <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> list <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Build random lists from lists of random generators.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.4</li></ul></div></div><div class="spec exception" id="exception-Pick_from_empty"><a href="#exception-Pick_from_empty" class="anchor"></a><div class="def exception"><code><span class="keyword">exception </span></code><code><span class="exception">Pick_from_empty</span></code></div><div class="doc"><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-pick_list"><a href="#val-pick_list" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pick_list : <span class="type-var">'a</span> list <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>Pick an element at random from the list.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Pick_from_empty</span>: if the list is empty.</li><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-pick_array"><a href="#val-pick_array" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pick_array : <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>Pick an element at random from the array.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Pick_from_empty</span>: if the array is empty.</li><li><span class="at-tag since">Since</span>: 0.16</li></ul></div></div><div class="spec val" id="val-small_int"><a href="#val-small_int" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>small_int : int <a href="index.html#type-t">t</a></code></div><div class="doc"><p>A small int (100).</p></div></div><div class="spec val" id="val-int"><a href="#val-int" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>int : int <span class="keyword">&#8209;&gt;</span> int <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Random int within the given range.</p></div></div><div class="spec val" id="val-int_range"><a href="#val-int_range" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>int_range : int <span class="keyword">&#8209;&gt;</span> int <span class="keyword">&#8209;&gt;</span> int <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Inclusive range.</p></div></div><div class="spec val" id="val-small_float"><a href="#val-small_float" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>small_float : float <a href="index.html#type-t">t</a></code></div><div class="doc"><p>A reasonably small float (100.0).</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.6.1</li></ul></div></div><div class="spec val" id="val-float"><a href="#val-float" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>float : float <span class="keyword">&#8209;&gt;</span> float <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Random float within the given range.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.6.1</li></ul></div></div><div class="spec val" id="val-float_range"><a href="#val-float_range" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>float_range : float <span class="keyword">&#8209;&gt;</span> float <span class="keyword">&#8209;&gt;</span> float <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Inclusive range. <code class="code">float_range a b</code> assumes <code class="code">a &lt; b</code>.</p><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.6.1</li></ul></div></div><div class="spec val" id="val-split"><a href="#val-split" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>split : int <span class="keyword">&#8209;&gt;</span> (int<span class="keyword"> * </span>int) option <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Split a positive value <code class="code">n</code> into <code class="code">n1,n2</code> where <code class="code">n = n1 + n2</code>.</p><ul class="at-tag"><li><span class="at-tag return">Returns</span> <code class="code">None</code> if the value is too small.</li></ul></div></div><div class="spec val" id="val-split_list"><a href="#val-split_list" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>split_list : int <span class="keyword">&#8209;&gt;</span> len:int <span class="keyword">&#8209;&gt;</span> int list option <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Split a value <code class="code">n</code> into a list of values whose sum is <code class="code">n</code>
and whose length is <code class="code">length</code>. The list is never empty and does not
contain <code class="code">0</code>.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if <code class="code">len &lt;= 1</code>.</li><li><span class="at-tag return">Returns</span> <code class="code">None</code> if the value is too small.</li></ul></div></div><div class="spec val" id="val-retry"><a href="#val-retry" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>retry : ?&#8288;max:int <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">retry g</code> calls <code class="code">g</code> until it returns some value, or until the maximum
number of retries was reached. If <code class="code">g</code> fails,
then it counts for one iteration, and the generator retries.</p><ul class="at-tag"><li><span class="at-tag parameter">Parameter</span> <span class="module-path">max</span>: : maximum number of retries. Default <code class="code">10</code>.</li></ul></div></div><div class="spec val" id="val-try_successively"><a href="#val-try_successively" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>try_successively : <span class="type-var">'a</span> option <a href="index.html#type-t">t</a> list <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">try_successively l</code> tries each generator of <code class="code">l</code>, one after the other.
If some generator succeeds its result is returned, else the
next generator is tried.</p></div></div><div class="spec val" id="val-(&lt;?&gt;)"><a href="#val-(&lt;?&gt;)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(&lt;?&gt;) : <span class="type-var">'a</span> option <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">a &lt;?&gt; b</code> is a choice operator. It first tries <code class="code">a</code>, and returns its
result if successful. If <code class="code">a</code> fails, then <code class="code">b</code> is returned.</p></div></div><div class="spec val" id="val-fix"><a href="#val-fix" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fix : ?&#8288;sub1:(<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-t">t</a>) list <span class="keyword">&#8209;&gt;</span> ?&#8288;sub2:(<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-t">t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <a href="index.html#type-t">t</a>) list <span class="keyword">&#8209;&gt;</span> ?&#8288;subn:(int <a href="index.html#type-t">t</a><span class="keyword"> * </span>(<span class="type-var">'a</span> list <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-t">t</a>)) list <span class="keyword">&#8209;&gt;</span> base:<span class="type-var">'a</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> int <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-t">t</a></code></div><div class="doc"><p>Recursion combinators, for building recursive values.
The integer generator is used to provide fuel. The <code class="code">sub_</code> generators
should use their arguments only once!</p><ul class="at-tag"><li><span class="at-tag parameter">Parameter</span> <span class="module-path">sub1</span>: cases that recurse on one value.</li><li><span class="at-tag parameter">Parameter</span> <span class="module-path">sub2</span>: cases that use the recursive gen twice.</li><li><span class="at-tag parameter">Parameter</span> <span class="module-path">subn</span>: cases that use a list of recursive cases.</li></ul></div></div><h5>Applicative</h5><div class="spec val" id="val-pure"><a href="#val-pure" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pure : <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></code></div><div class="doc"></div></div><div class="spec val" id="val-(&lt;*&gt;)"><a href="#val-(&lt;*&gt;)" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>(&lt;*&gt;) : (<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> <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></code></div><div class="doc"></div></div><h5>Run a generator</h5><div class="spec val" id="val-run"><a href="#val-run" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>run : ?&#8288;st:<a href="index.html#type-state">state</a> <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></code></div><div class="doc"><p>Using a random state (possibly the one in argument) run a generator.</p></div></div></body></html>