mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
17 lines
33 KiB
HTML
17 lines
33 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCRandom (containers.CCRandom)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.3.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../index.html">containers</a> » CCRandom</nav><header class="odoc-preamble"><h1>Module <code><span>CCRandom</span></code></h1><p>Random Generators</p></header><nav class="odoc-toc"><ul><li><a href="#basic-functions">Basic functions</a></li><li><a href="#advanced-functions">Advanced functions</a><ul><li><a href="#applicative">Applicative</a></li><li><a href="#run-a-generator">Run a generator</a></li></ul></li></ul></nav><div class="odoc-content"><h2 id="basic-functions"><a href="#basic-functions" class="anchor"></a>Basic functions</h2><div class="odoc-spec"><div class="spec value anchored" id="val-init"><a href="#val-init" class="anchor"></a><code><span><span class="keyword">val</span> init : <span>int <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Initialize the generator, using the argument as a seed. The same seed will always yield the same sequence of numbers.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-full_init"><a href="#val-full_init" class="anchor"></a><code><span><span class="keyword">val</span> full_init : <span><span>int array</span> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Same as <code>Random.init</code> but takes more data as seed.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-self_init"><a href="#val-self_init" class="anchor"></a><code><span><span class="keyword">val</span> self_init : <span>unit <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Initialize the generator with a random seed chosen in a system-dependent way. If <code>/dev/urandom</code> is available on the host machine, it is used to provide a highly random initial seed. Otherwise, a less random seed is computed from system parameters (current time, process IDs).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bits"><a href="#val-bits" class="anchor"></a><code><span><span class="keyword">val</span> bits : <span>unit <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Return 30 random bits in a nonnegative integer.</p><ul class="at-tags"><li class="before"><span class="at-tag">before</span> <span class="value">3.12.0</span> <p>used a different algorithm (affects all the following functions)</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-full_int"><a href="#val-full_int" class="anchor"></a><code><span><span class="keyword">val</span> full_int : <span>int <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p><code>Random.full_int bound</code> returns a random integer between 0 (inclusive) and <code>bound</code> (exclusive). <code>bound</code> may be any positive integer.</p><p>If <code>bound</code> is less than 2<sup>30</sup>, <code>Random.full_int bound</code> is equal to <code>Random.int</code><code> bound</code>. If <code>bound</code> is greater than 2<sup>30</sup> (on 64-bit systems or non-standard environments, such as JavaScript), <code>Random.full_int</code> returns a value, where <code>Random.int</code> raises <code>Invalid_argument</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 4.13.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int32"><a href="#val-int32" class="anchor"></a><code><span><span class="keyword">val</span> int32 : <span><a href="../../ocaml/Stdlib/Int32/index.html#type-t">Stdlib.Int32.t</a> <span class="arrow">-></span></span> <a href="../../ocaml/Stdlib/Int32/index.html#type-t">Stdlib.Int32.t</a></span></code></div><div class="spec-doc"><p><code>Random.int32 bound</code> returns a random integer between 0 (inclusive) and <code>bound</code> (exclusive). <code>bound</code> must be greater than 0.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-nativeint"><a href="#val-nativeint" class="anchor"></a><code><span><span class="keyword">val</span> nativeint : <span><a href="../../ocaml/Stdlib/Nativeint/index.html#type-t">Stdlib.Nativeint.t</a> <span class="arrow">-></span></span> <a href="../../ocaml/Stdlib/Nativeint/index.html#type-t">Stdlib.Nativeint.t</a></span></code></div><div class="spec-doc"><p><code>Random.nativeint bound</code> returns a random integer between 0 (inclusive) and <code>bound</code> (exclusive). <code>bound</code> must be greater than 0.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int64"><a href="#val-int64" class="anchor"></a><code><span><span class="keyword">val</span> int64 : <span><a href="../../ocaml/Stdlib/Int64/index.html#type-t">Stdlib.Int64.t</a> <span class="arrow">-></span></span> <a href="../../ocaml/Stdlib/Int64/index.html#type-t">Stdlib.Int64.t</a></span></code></div><div class="spec-doc"><p><code>Random.int64 bound</code> returns a random integer between 0 (inclusive) and <code>bound</code> (exclusive). <code>bound</code> must be greater than 0.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bool"><a href="#val-bool" class="anchor"></a><code><span><span class="keyword">val</span> bool : <span>unit <span class="arrow">-></span></span> bool</span></code></div><div class="spec-doc"><p><code>Random.bool ()</code> returns <code>true</code> or <code>false</code> with probability 0.5 each.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bits32"><a href="#val-bits32" class="anchor"></a><code><span><span class="keyword">val</span> bits32 : <span>unit <span class="arrow">-></span></span> <a href="../../ocaml/Stdlib/Int32/index.html#type-t">Stdlib.Int32.t</a></span></code></div><div class="spec-doc"><p><code>Random.bits32 ()</code> returns 32 random bits as an integer between <code>Int32.min_int</code> and <code>Int32.max_int</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 4.14.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bits64"><a href="#val-bits64" class="anchor"></a><code><span><span class="keyword">val</span> bits64 : <span>unit <span class="arrow">-></span></span> <a href="../../ocaml/Stdlib/Int64/index.html#type-t">Stdlib.Int64.t</a></span></code></div><div class="spec-doc"><p><code>Random.bits64 ()</code> returns 64 random bits as an integer between <code>Int64.min_int</code> and <code>Int64.max_int</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 4.14.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-nativebits"><a href="#val-nativebits" class="anchor"></a><code><span><span class="keyword">val</span> nativebits : <span>unit <span class="arrow">-></span></span> <a href="../../ocaml/Stdlib/Nativeint/index.html#type-t">Stdlib.Nativeint.t</a></span></code></div><div class="spec-doc"><p><code>Random.nativebits ()</code> returns 32 or 64 random bits (depending on the bit width of the platform) as an integer between <code>Nativeint.min_int</code> and <code>Nativeint.max_int</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 4.14.0</li></ul></div></div><h2 id="advanced-functions"><a href="#advanced-functions" class="anchor"></a>Advanced functions</h2><p>The functions from module <a href="State/index.html"><code>State</code></a> manipulate the current state of the random generator explicitly. This allows using one or several deterministic PRNGs, even in a multi-threaded program, without interference from other parts of the program.</p><div class="odoc-spec"><div class="spec module anchored" id="module-State"><a href="#module-State" class="anchor"></a><code><span><span class="keyword">module</span> State</span><span> = <a href="../../ocaml/Stdlib/Random/State/index.html">Stdlib.Random.State</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_state"><a href="#val-get_state" class="anchor"></a><code><span><span class="keyword">val</span> get_state : <span>unit <span class="arrow">-></span></span> <a href="../../ocaml/Stdlib/Random/State/index.html#type-t">State.t</a></span></code></div><div class="spec-doc"><p>Return the current state of the generator used by the basic functions.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_state"><a href="#val-set_state" class="anchor"></a><code><span><span class="keyword">val</span> set_state : <span><a href="../../ocaml/Stdlib/Random/State/index.html#type-t">State.t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p>Set the state of the generator used by the basic functions.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-state"><a href="#type-state" class="anchor"></a><code><span><span class="keyword">type</span> state</span><span> = <a href="../../ocaml/Stdlib/Random/State/index.html#type-t">Stdlib.Random.State.t</a></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a t</span></span><span> = <span><a href="#type-state">state</a> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p>Random generator for values of type <code>'a</code>.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-random_gen"><a href="#type-random_gen" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a random_gen</span></span><span> = <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-return"><a href="#val-return" class="anchor"></a><code><span><span class="keyword">val</span> return : <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>return x</code> is the generator that always returns <code>x</code>. Example: <code>let random_int = return 4 (* fair dice roll *)</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-flat_map"><a href="#val-flat_map" class="anchor"></a><code><span><span class="keyword">val</span> flat_map : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>flat_map f g st</code> is <code>f (g st) st</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-(>>=)"><a href="#val-(>>=)" class="anchor"></a><code><span><span class="keyword">val</span> (>>=) : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Monadic <code>bind</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map"><a href="#val-map" class="anchor"></a><code><span><span class="keyword">val</span> map : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>map f g st</code> is <code>f (g st)</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-(>|=)"><a href="#val-(>|=)" class="anchor"></a><code><span><span class="keyword">val</span> (>|=) : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-delay"><a href="#val-delay" class="anchor"></a><code><span><span class="keyword">val</span> delay : <span><span>(<span>unit <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Delay evaluation. Useful for side-effectful generators that need some code to run for every call. Example:</p><pre class="language-ocaml"><code>let gensym = let r = ref 0 in fun () -> incr r; !r ;;
|
||
|
||
delay (fun () ->
|
||
let name = gensym() in
|
||
small_int >>= fun i -> return (name,i)
|
||
)</code></pre><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.4</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choose"><a href="#val-choose" class="anchor"></a><code><span><span class="keyword">val</span> choose : <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> list</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Choose a generator within the list.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choose_exn"><a href="#val-choose_exn" class="anchor"></a><code><span><span class="keyword">val</span> choose_exn : <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> list</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Like <a href="#val-choose"><code>choose</code></a> but without option.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <code>Invalid_argument</code> <p>if the list is empty.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choose_array"><a href="#val-choose_array" class="anchor"></a><code><span><span class="keyword">val</span> choose_array : <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> array</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Choose a generator within the array.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choose_return"><a href="#val-choose_return" class="anchor"></a><code><span><span class="keyword">val</span> choose_return : <span><span><span class="type-var">'a</span> list</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Choose among the list.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <code>Invalid_argument</code> <p>if the list is empty.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-replicate"><a href="#val-replicate" class="anchor"></a><code><span><span class="keyword">val</span> replicate : <span>int <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> list</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>replicate n g</code> makes a list of <code>n</code> elements which are all generated randomly using <code>g</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-sample_without_duplicates"><a href="#val-sample_without_duplicates" class="anchor"></a><code><span><span class="keyword">val</span> sample_without_duplicates :
|
||
<span><span class="label">cmp</span>:<span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> int)</span> <span class="arrow">-></span></span>
|
||
<span>int <span class="arrow">-></span></span>
|
||
<span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span>
|
||
<span><span><span class="type-var">'a</span> list</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>sample_without_replacement n g</code> makes a list of <code>n</code> elements which are all generated randomly using <code>g</code> with the added constraint that none of the generated random values are equal.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <code>Invalid_argument</code> <p>if <code>n <= 0</code>.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.4</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-list_seq"><a href="#val-list_seq" class="anchor"></a><code><span><span class="keyword">val</span> list_seq : <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> list</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> list</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Build random lists from lists of random generators.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.4</li></ul></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Pick_from_empty"><a href="#exception-Pick_from_empty" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Pick_from_empty</span></span></code></div><div class="spec-doc"><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pick_list"><a href="#val-pick_list" class="anchor"></a><code><span><span class="keyword">val</span> pick_list : <span><span><span class="type-var">'a</span> list</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Pick an element at random from the list.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Pick_from_empty"><code>Pick_from_empty</code></a> <p>if the list is empty.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pick_array"><a href="#val-pick_array" class="anchor"></a><code><span><span class="keyword">val</span> pick_array : <span><span><span class="type-var">'a</span> array</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Pick an element at random from the array.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Pick_from_empty"><code>Pick_from_empty</code></a> <p>if the array is empty.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-small_int"><a href="#val-small_int" class="anchor"></a><code><span><span class="keyword">val</span> small_int : <span>int <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>A small int (100).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int"><a href="#val-int" class="anchor"></a><code><span><span class="keyword">val</span> int : <span>int <span class="arrow">-></span></span> <span>int <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Random int within the given range.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-int_range"><a href="#val-int_range" class="anchor"></a><code><span><span class="keyword">val</span> int_range : <span>int <span class="arrow">-></span></span> <span>int <span class="arrow">-></span></span> <span>int <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Inclusive range.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-small_float"><a href="#val-small_float" class="anchor"></a><code><span><span class="keyword">val</span> small_float : <span>float <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>A reasonably small float (100.0).</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.6.1</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-float"><a href="#val-float" class="anchor"></a><code><span><span class="keyword">val</span> float : <span>float <span class="arrow">-></span></span> <span>float <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Random float within the given range.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.6.1</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-float_range"><a href="#val-float_range" class="anchor"></a><code><span><span class="keyword">val</span> float_range : <span>float <span class="arrow">-></span></span> <span>float <span class="arrow">-></span></span> <span>float <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Inclusive range. <code>float_range a b</code> assumes <code>a < b</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.6.1</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-split"><a href="#val-split" class="anchor"></a><code><span><span class="keyword">val</span> split : <span>int <span class="arrow">-></span></span> <span><span><span>(int * int)</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Split a positive value <code>n</code> into <code>n1,n2</code> where <code>n = n1 + n2</code>.</p><ul class="at-tags"><li class="returns"><span class="at-tag">returns</span> <p><code>None</code> if the value is too small.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-split_list"><a href="#val-split_list" class="anchor"></a><code><span><span class="keyword">val</span> split_list : <span>int <span class="arrow">-></span></span> <span><span class="label">len</span>:int <span class="arrow">-></span></span> <span><span><span>int list</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Split a value <code>n</code> into a list of values whose sum is <code>n</code> and whose length is <code>length</code>. The list is never empty and does not contain <code>0</code>.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <code>Invalid_argument</code> <p>if <code>len <= 1</code>.</p></li></ul><ul class="at-tags"><li class="returns"><span class="at-tag">returns</span> <p><code>None</code> if the value is too small.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-retry"><a href="#val-retry" class="anchor"></a><code><span><span class="keyword">val</span> retry : <span><span class="optlabel">?max</span>:int <span class="arrow">-></span></span> <span><span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>retry g</code> calls <code>g</code> until it returns some value, or until the maximum number of retries was reached. If <code>g</code> fails, then it counts for one iteration, and the generator retries.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">max:</span> <p>maximum number of retries. Default <code>10</code>.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-try_successively"><a href="#val-try_successively" class="anchor"></a><code><span><span class="keyword">val</span> try_successively : <span><span><span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span> list</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>try_successively l</code> tries each generator of <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="odoc-spec"><div class="spec value anchored" id="val-(<?>)"><a href="#val-(<?>)" class="anchor"></a><code><span><span class="keyword">val</span> (<?>) : <span><span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> option</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>a <?> b</code> is a choice operator. It first tries <code>a</code>, and returns its result if successful. If <code>a</code> fails, then <code>b</code> is returned.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fix"><a href="#val-fix" class="anchor"></a><code><span><span class="keyword">val</span> fix :
|
||
<span><span class="optlabel">?sub1</span>:<span><span>(<span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span>)</span> list</span> <span class="arrow">-></span></span>
|
||
<span><span class="optlabel">?sub2</span>:<span><span>(<span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span>)</span> list</span> <span class="arrow">-></span></span>
|
||
<span><span class="optlabel">?subn</span>:<span><span>(<span>int <a href="#type-t">t</a></span> * <span>(<span><span><span><span class="type-var">'a</span> list</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span>)</span>)</span> list</span> <span class="arrow">-></span></span>
|
||
<span><span class="label">base</span>:<span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span>
|
||
<span><span>int <a href="#type-t">t</a></span> <span class="arrow">-></span></span>
|
||
<span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Recursion combinators, for building recursive values. The integer generator is used to provide fuel. The <code>sub_</code> generators should use their arguments only once!</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">sub1</span> <p>cases that recurse on one value.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">sub2</span> <p>cases that use the recursive gen twice.</p></li></ul><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">subn</span> <p>cases that use a list of recursive cases.</p></li></ul></div></div><h5 id="applicative"><a href="#applicative" class="anchor"></a>Applicative</h5><div class="odoc-spec"><div class="spec value anchored" id="val-pure"><a href="#val-pure" class="anchor"></a><code><span><span class="keyword">val</span> pure : <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-(<*>)"><a href="#val-(<*>)" class="anchor"></a><code><span><span class="keyword">val</span> (<*>) : <span><span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span><span class="keyword">val</span> let+ : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span><span class="keyword">val</span> and+ : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span><span class="keyword">val</span> let* : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and*"><a href="#val-and*" class="anchor"></a><code><span><span class="keyword">val</span> and* : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span></span></code></div></div><h5 id="run-a-generator"><a href="#run-a-generator" class="anchor"></a>Run a generator</h5><div class="odoc-spec"><div class="spec value anchored" id="val-run"><a href="#val-run" class="anchor"></a><code><span><span class="keyword">val</span> run : <span><span class="optlabel">?st</span>:<a href="#type-state">state</a> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p>Using a random state (possibly the one in argument) run a generator.</p></div></div></div></body></html>
|