mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
7 lines
No EOL
23 KiB
HTML
7 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="generator" content="odoc 1.5.2"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> – <a href="../index.html">containers</a> » CCRandom</nav><h1>Module <code>CCRandom</code></h1><h2 id="random-generators"><a href="#random-generators" class="anchor"></a>Random Generators</h2><nav class="toc"><ul><li><a href="#applicative">Applicative</a></li><li><a href="#run-a-generator">Run a generator</a></li></ul></nav></header><div><div class="spec include"><div class="doc"><p><a href="https://caml.inria.fr/pub/docs/manual-ocaml/libref/Random.html">Documentation for the standard Random module</a></p><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <span class="keyword">module</span> <span class="keyword">type</span> <span class="keyword">of</span> <span class="keyword">sig</span> ... <span class="keyword">end</span></code></span></summary><dl><dt class="spec value" id="val-init"><a href="#val-init" class="anchor"></a><code><span class="keyword">val</span> init : int <span>-></span> unit</code></dt><dt class="spec value" id="val-full_init"><a href="#val-full_init" class="anchor"></a><code><span class="keyword">val</span> full_init : <span>int array</span> <span>-></span> unit</code></dt><dt class="spec value" id="val-self_init"><a href="#val-self_init" class="anchor"></a><code><span class="keyword">val</span> self_init : unit <span>-></span> unit</code></dt><dt class="spec value" id="val-bits"><a href="#val-bits" class="anchor"></a><code><span class="keyword">val</span> bits : unit <span>-></span> int</code></dt><dt class="spec value" id="val-int"><a href="#val-int" class="anchor"></a><code><span class="keyword">val</span> int : int <span>-></span> int</code></dt><dt class="spec value" id="val-int32"><a href="#val-int32" class="anchor"></a><code><span class="keyword">val</span> int32 : Stdlib.Int32.t <span>-></span> Stdlib.Int32.t</code></dt><dt class="spec value" id="val-nativeint"><a href="#val-nativeint" class="anchor"></a><code><span class="keyword">val</span> nativeint : Stdlib.Nativeint.t <span>-></span> Stdlib.Nativeint.t</code></dt><dt class="spec value" id="val-int64"><a href="#val-int64" class="anchor"></a><code><span class="keyword">val</span> int64 : Stdlib.Int64.t <span>-></span> Stdlib.Int64.t</code></dt><dt class="spec value" id="val-float"><a href="#val-float" class="anchor"></a><code><span class="keyword">val</span> float : float <span>-></span> float</code></dt><dt class="spec value" id="val-bool"><a href="#val-bool" class="anchor"></a><code><span class="keyword">val</span> bool : unit <span>-></span> bool</code></dt></dl><div class="spec module" id="module-State"><a href="#module-State" class="anchor"></a><code><span class="keyword">module</span> State = Stdlib__random.State</code></div><dl><dt class="spec value" id="val-get_state"><a href="#val-get_state" class="anchor"></a><code><span class="keyword">val</span> get_state : unit <span>-></span> <a href="index.html#module-State">State</a>.t</code></dt><dt class="spec value" id="val-set_state"><a href="#val-set_state" class="anchor"></a><code><span class="keyword">val</span> set_state : <a href="index.html#module-State">State</a>.t <span>-></span> unit</code></dt></dl></details></div></div></div><dl><dt class="spec type" id="type-state"><a href="#type-state" class="anchor"></a><code><span class="keyword">type</span> state</code><code> = Stdlib.Random.State.t</code></dt><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> <span>'a t</span></code><code> = <a href="index.html#type-state">state</a> <span>-></span> <span class="type-var">'a</span></code></dt><dd><p>Random generator for values of type <code>'a</code>.</p></dd></dl><dl><dt class="spec type" id="type-random_gen"><a href="#type-random_gen" class="anchor"></a><code><span class="keyword">type</span> <span>'a random_gen</span></code><code> = <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt></dl><dl><dt class="spec value" id="val-return"><a href="#val-return" class="anchor"></a><code><span class="keyword">val</span> return : <span class="type-var">'a</span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><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></dd></dl><dl><dt class="spec value" id="val-flat_map"><a href="#val-flat_map" class="anchor"></a><code><span class="keyword">val</span> flat_map : <span>(<span class="type-var">'a</span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></span>)</span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p><code>flat_map f g st</code> is <code>f (g st) st</code>.</p></dd></dl><dl><dt class="spec value" id="val-(>>=)"><a href="#val-(>>=)" class="anchor"></a><code><span class="keyword">val</span> (>>=) : <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span>(<span class="type-var">'a</span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></span>)</span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Monadic <code>bind</code>.</p></dd></dl><dl><dt class="spec value" id="val-map"><a href="#val-map" class="anchor"></a><code><span class="keyword">val</span> map : <span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>)</span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p><code>map f g st</code> is <code>f (g st)</code>.</p></dd></dl><dl><dt class="spec value" id="val-(>|=)"><a href="#val-(>|=)" class="anchor"></a><code><span class="keyword">val</span> (>|=) : <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>)</span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></span></code></dt><dt class="spec value" id="val-delay"><a href="#val-delay" class="anchor"></a><code><span class="keyword">val</span> delay : <span>(unit <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span>)</span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Delay evaluation. Useful for side-effectful generators that need some code to run for every call. Example:</p><pre><code class="ml">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><dl><dt>since</dt><dd>0.4</dd></dl></dd></dl><dl><dt class="spec value" id="val-choose"><a href="#val-choose" class="anchor"></a><code><span class="keyword">val</span> choose : <span><span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> list</span> <span>-></span> <span><span><span class="type-var">'a</span> option</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Choose a generator within the list.</p></dd></dl><dl><dt class="spec value" id="val-choose_exn"><a href="#val-choose_exn" class="anchor"></a><code><span class="keyword">val</span> choose_exn : <span><span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> list</span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Like <a href="index.html#val-choose"><code>choose</code></a> but without option.</p><dl><dt>raises Invalid_argument</dt><dd><p>if the list is empty.</p></dd></dl></dd></dl><dl><dt class="spec value" id="val-choose_array"><a href="#val-choose_array" class="anchor"></a><code><span class="keyword">val</span> choose_array : <span><span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> array</span> <span>-></span> <span><span><span class="type-var">'a</span> option</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Choose a generator within the array.</p></dd></dl><dl><dt class="spec value" id="val-choose_return"><a href="#val-choose_return" class="anchor"></a><code><span class="keyword">val</span> choose_return : <span><span class="type-var">'a</span> list</span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Choose among the list.</p><dl><dt>raises Invalid_argument</dt><dd><p>if the list is empty.</p></dd></dl></dd></dl><dl><dt class="spec value" id="val-replicate"><a href="#val-replicate" class="anchor"></a><code><span class="keyword">val</span> replicate : int <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span><span class="type-var">'a</span> list</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p><code>replicate n g</code> makes a list of <code>n</code> elements which are all generated randomly using <code>g</code>.</p></dd></dl><dl><dt class="spec value" id="val-sample_without_duplicates"><a href="#val-sample_without_duplicates" class="anchor"></a><code><span class="keyword">val</span> sample_without_duplicates : <span>cmp:<span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'a</span> <span>-></span> int)</span></span> <span>-></span> int <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span><span class="type-var">'a</span> list</span> <a href="index.html#type-t">t</a></span></code></dt><dd><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><dl><dt>raises Invalid_argument</dt><dd><p>if <code>n <= 0</code>.</p></dd></dl><dl><dt>since</dt><dd>2.4</dd></dl></dd></dl><dl><dt class="spec value" id="val-list_seq"><a href="#val-list_seq" class="anchor"></a><code><span class="keyword">val</span> list_seq : <span><span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> list</span> <span>-></span> <span><span><span class="type-var">'a</span> list</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Build random lists from lists of random generators.</p><dl><dt>since</dt><dd>0.4</dd></dl></dd></dl><dl><dt class="spec exception" id="exception-Pick_from_empty"><a href="#exception-Pick_from_empty" class="anchor"></a><code><span class="keyword">exception</span> </code><code><span class="exception">Pick_from_empty</span></code></dt><dd><dl><dt>since</dt><dd>0.16</dd></dl></dd></dl><dl><dt class="spec value" id="val-pick_list"><a href="#val-pick_list" class="anchor"></a><code><span class="keyword">val</span> pick_list : <span><span class="type-var">'a</span> list</span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Pick an element at random from the list.</p><dl><dt>raises Pick_from_empty</dt><dd><p>if the list is empty.</p></dd></dl><dl><dt>since</dt><dd>0.16</dd></dl></dd></dl><dl><dt class="spec value" id="val-pick_array"><a href="#val-pick_array" class="anchor"></a><code><span class="keyword">val</span> pick_array : <span><span class="type-var">'a</span> array</span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Pick an element at random from the array.</p><dl><dt>raises Pick_from_empty</dt><dd><p>if the array is empty.</p></dd></dl><dl><dt>since</dt><dd>0.16</dd></dl></dd></dl><dl><dt class="spec value" id="val-small_int"><a href="#val-small_int" class="anchor"></a><code><span class="keyword">val</span> small_int : <span>int <a href="index.html#type-t">t</a></span></code></dt><dd><p>A small int (100).</p></dd></dl><dl><dt class="spec value" id="val-int"><a href="#val-int" class="anchor"></a><code><span class="keyword">val</span> int : int <span>-></span> <span>int <a href="index.html#type-t">t</a></span></code></dt><dd><p>Random int within the given range.</p></dd></dl><dl><dt class="spec value" id="val-int_range"><a href="#val-int_range" class="anchor"></a><code><span class="keyword">val</span> int_range : int <span>-></span> int <span>-></span> <span>int <a href="index.html#type-t">t</a></span></code></dt><dd><p>Inclusive range.</p></dd></dl><dl><dt class="spec value" id="val-small_float"><a href="#val-small_float" class="anchor"></a><code><span class="keyword">val</span> small_float : <span>float <a href="index.html#type-t">t</a></span></code></dt><dd><p>A reasonably small float (100.0).</p><dl><dt>since</dt><dd>0.6.1</dd></dl></dd></dl><dl><dt class="spec value" id="val-float"><a href="#val-float" class="anchor"></a><code><span class="keyword">val</span> float : float <span>-></span> <span>float <a href="index.html#type-t">t</a></span></code></dt><dd><p>Random float within the given range.</p><dl><dt>since</dt><dd>0.6.1</dd></dl></dd></dl><dl><dt class="spec value" id="val-float_range"><a href="#val-float_range" class="anchor"></a><code><span class="keyword">val</span> float_range : float <span>-></span> float <span>-></span> <span>float <a href="index.html#type-t">t</a></span></code></dt><dd><p>Inclusive range. <code>float_range a b</code> assumes <code>a < b</code>.</p><dl><dt>since</dt><dd>0.6.1</dd></dl></dd></dl><dl><dt class="spec value" id="val-split"><a href="#val-split" class="anchor"></a><code><span class="keyword">val</span> split : int <span>-></span> <span><span><span>(int * int)</span> option</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Split a positive value <code>n</code> into <code>n1,n2</code> where <code>n = n1 + n2</code>.</p><dl><dt>returns</dt><dd><p><code>None</code> if the value is too small.</p></dd></dl></dd></dl><dl><dt class="spec value" id="val-split_list"><a href="#val-split_list" class="anchor"></a><code><span class="keyword">val</span> split_list : int <span>-></span> <span>len:int</span> <span>-></span> <span><span><span>int list</span> option</span> <a href="index.html#type-t">t</a></span></code></dt><dd><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><dl><dt>raises Invalid_argument</dt><dd><p>if <code>len <= 1</code>.</p></dd></dl><dl><dt>returns</dt><dd><p><code>None</code> if the value is too small.</p></dd></dl></dd></dl><dl><dt class="spec value" id="val-retry"><a href="#val-retry" class="anchor"></a><code><span class="keyword">val</span> retry : <span>?⁠max:int</span> <span>-></span> <span><span><span class="type-var">'a</span> option</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span><span class="type-var">'a</span> option</span> <a href="index.html#type-t">t</a></span></code></dt><dd><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><dl><dt>parameter max:</dt><dd><p>maximum number of retries. Default <code>10</code>.</p></dd></dl></dd></dl><dl><dt class="spec value" id="val-try_successively"><a href="#val-try_successively" class="anchor"></a><code><span class="keyword">val</span> try_successively : <span><span><span><span class="type-var">'a</span> option</span> <a href="index.html#type-t">t</a></span> list</span> <span>-></span> <span><span><span class="type-var">'a</span> option</span> <a href="index.html#type-t">t</a></span></code></dt><dd><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></dd></dl><dl><dt class="spec value" id="val-(<?>)"><a href="#val-(<?>)" class="anchor"></a><code><span class="keyword">val</span> (<?>) : <span><span><span class="type-var">'a</span> option</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span><span class="type-var">'a</span> option</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span><span class="type-var">'a</span> option</span> <a href="index.html#type-t">t</a></span></code></dt><dd><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></dd></dl><dl><dt class="spec value" id="val-fix"><a href="#val-fix" class="anchor"></a><code><span class="keyword">val</span> fix : <span>?⁠sub1:<span><span>(<span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span>)</span> list</span></span> <span>-></span> <span>?⁠sub2:<span><span>(<span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span>)</span> list</span></span> <span>-></span> <span>?⁠subn:<span><span>(<span>int <a href="index.html#type-t">t</a></span> * <span>(<span><span><span class="type-var">'a</span> list</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span>)</span>)</span> list</span></span> <span>-></span> <span>base:<span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></span> <span>-></span> <span>int <a href="index.html#type-t">t</a></span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><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><dl><dt>parameter sub1</dt><dd><p>cases that recurse on one value.</p></dd></dl><dl><dt>parameter sub2</dt><dd><p>cases that use the recursive gen twice.</p></dd></dl><dl><dt>parameter subn</dt><dd><p>cases that use a list of recursive cases.</p></dd></dl></dd></dl><section><header><h5 id="applicative"><a href="#applicative" class="anchor"></a>Applicative</h5></header><dl><dt class="spec value" id="val-pure"><a href="#val-pure" class="anchor"></a><code><span class="keyword">val</span> pure : <span class="type-var">'a</span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dt class="spec value" id="val-(<*>)"><a href="#val-(<*>)" class="anchor"></a><code><span class="keyword">val</span> (<*>) : <span><span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>)</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></span></code></dt></dl><div><div class="spec include"><div class="doc"><p>Let operators on OCaml >= 4.08.0, nothing otherwise</p><dl><dt>since</dt><dd>2.8</dd></dl><details open="open"><summary><span class="def"><code><span class="keyword">include</span> <a href="../CCShimsMkLet_/index.html#module-type-S">CCShimsMkLet_.S</a> <span class="keyword">with</span> <span class="keyword">type</span> <span>'a <a href="../CCShimsMkLet_/module-type-S/index.html#type-t_let">t_let</a></span> := <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></span></summary><dl><dt class="spec type" id="type-t_let"><a href="#type-t_let" class="anchor"></a><code><span class="keyword">type</span> <span>'a t_let</span></code></dt></dl><dl><dt class="spec value" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span class="keyword">val</span> let+ : <span><span class="type-var">'a</span> <a href="index.html#type-t_let">t_let</a></span> <span>-></span> <span>(<span class="type-var">'a</span> <span>-></span> <span class="type-var">'b</span>)</span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t_let">t_let</a></span></code></dt><dt class="spec value" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span class="keyword">val</span> and+ : <span><span class="type-var">'a</span> <a href="index.html#type-t_let">t_let</a></span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t_let">t_let</a></span> <span>-></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="index.html#type-t_let">t_let</a></span></code></dt><dt class="spec value" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span class="keyword">val</span> let* : <span><span class="type-var">'a</span> <a href="index.html#type-t_let">t_let</a></span> <span>-></span> <span>(<span class="type-var">'a</span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t_let">t_let</a></span>)</span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t_let">t_let</a></span></code></dt><dt class="spec value" id="val-and*"><a href="#val-and*" class="anchor"></a><code><span class="keyword">val</span> and* : <span><span class="type-var">'a</span> <a href="index.html#type-t_let">t_let</a></span> <span>-></span> <span><span class="type-var">'b</span> <a href="index.html#type-t_let">t_let</a></span> <span>-></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="index.html#type-t_let">t_let</a></span></code></dt></dl></details></div></div></div></section><section><header><h5 id="run-a-generator"><a href="#run-a-generator" class="anchor"></a>Run a generator</h5></header><dl><dt class="spec value" id="val-run"><a href="#val-run" class="anchor"></a><code><span class="keyword">val</span> run : <span>?⁠st:<a href="index.html#type-state">state</a></span> <span>-></span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>-></span> <span class="type-var">'a</span></code></dt><dd><p>Using a random state (possibly the one in argument) run a generator.</p></dd></dl></section></div></body></html> |