mirror of
https://github.com/wren-lang/wren.git
synced 2026-01-12 22:58:40 +01:00
177 lines
14 KiB
HTML
177 lines
14 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
|
|
<title>Random Class – Wren</title>
|
|
<link rel="stylesheet" type="text/css" href="../../style.css" />
|
|
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:400,700,400italic,700italic|Source+Code+Pro:400|Lato:400|Sanchez:400italic,400' rel='stylesheet' type='text/css'>
|
|
<!-- Tell mobile browsers we're optimized for them and they don't need to crop
|
|
the viewport. -->
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
|
|
</head>
|
|
<body id="top" class="module">
|
|
<header>
|
|
<div class="page">
|
|
<div class="main-column">
|
|
<h1><a href="../../">wren</a></h1>
|
|
<h2>a classy little scripting language</h2>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
<div class="page">
|
|
<nav class="big">
|
|
<ul>
|
|
<li><a href="../">Modules</a></li>
|
|
<li><a href="./">random</a></li>
|
|
</ul>
|
|
<section>
|
|
<h2>random classes</h2>
|
|
<ul>
|
|
<li><a href="random.html">Random</a></li>
|
|
</ul>
|
|
</section>
|
|
</nav>
|
|
<nav class="small">
|
|
<table>
|
|
<tr>
|
|
<td><a href="../">Modules</a></td>
|
|
<td><a href="./">random</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2"><h2>random classes</h2></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<ul>
|
|
<li><a href="random.html">Random</a></li>
|
|
</ul>
|
|
</td>
|
|
<td>
|
|
<ul>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</nav>
|
|
<main>
|
|
<h1>Random Class</h1>
|
|
<p>A simple, fast pseudo-random number generator. Internally, it uses the <a href="https://en.wikipedia.org/wiki/Well_equidistributed_long-period_linear">well
|
|
equidistributed long-period linear PRNG</a> (WELL512a). </p>
|
|
<p>Each instance of the class generates a sequence of randomly distributed numbers
|
|
based on the internal state of the object. The state is initialized from a
|
|
<em>seed</em>. Two instances with the same seed generate the exact same sequence of
|
|
numbers. </p>
|
|
<p>It must be imported from the <a href="../">random</a> module: </p>
|
|
<div class="codehilite"><pre><span></span><span class="k">import</span> <span class="s">"random"</span> <span class="k">for</span> <span class="vg">Random</span>
|
|
</pre></div>
|
|
|
|
|
|
<h2>Constructors <a href="#constructors" name="constructors" class="header-anchor">#</a></h2>
|
|
<h3>Random.<strong>new</strong>() <a href="#random.new()" name="random.new()" class="header-anchor">#</a></h3>
|
|
<p>Creates a new generator whose state is seeded based on the current time. </p>
|
|
<div class="codehilite"><pre><span></span><span class="k">var</span> <span class="n">random</span> <span class="o">=</span> <span class="vg">Random</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3>Random.<strong>new</strong>(seed) <a href="#random.new(seed)" name="random.new(seed)" class="header-anchor">#</a></h3>
|
|
<p>Creates a new generator initialized with [seed]. The seed can either be a
|
|
number, or a non-empty sequence of numbers. If the sequnce has more than 16
|
|
elements, only the first 16 are used. If it has fewer, the elements are cycled
|
|
to generate 16 seed values. </p>
|
|
<div class="codehilite"><pre><span></span><span class="vg">Random</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">12345</span><span class="p">)</span>
|
|
<span class="vg">Random</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s">"appleseed"</span><span class="o">.</span><span class="n">codePoints</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
|
|
<h2>Methods <a href="#methods" name="methods" class="header-anchor">#</a></h2>
|
|
<h3><strong>float</strong>() <a href="#float()" name="float()" class="header-anchor">#</a></h3>
|
|
<p>Returns a floating point value between 0.0 and 1.0, including 0.0, but excluding
|
|
1.0. </p>
|
|
<div class="codehilite"><pre><span></span><span class="k">var</span> <span class="n">random</span> <span class="o">=</span> <span class="vg">Random</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">12345</span><span class="p">)</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">float</span><span class="p">())</span> <span class="output">0.53178795980617</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">float</span><span class="p">())</span> <span class="output">0.20180515043262</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">float</span><span class="p">())</span> <span class="output">0.43371948658705</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3><strong>float</strong>(end) <a href="#float(end)" name="float(end)" class="header-anchor">#</a></h3>
|
|
<p>Returns a floating point value between 0.0 and <code>end</code>, including 0.0 but
|
|
excluding <code>end</code>. </p>
|
|
<div class="codehilite"><pre><span></span><span class="k">var</span> <span class="n">random</span> <span class="o">=</span> <span class="vg">Random</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">12345</span><span class="p">)</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">float</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> <span class="output">0</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">float</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span> <span class="output">20.180515043262</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">float</span><span class="p">(</span><span class="o">-</span><span class="mi">100</span><span class="p">))</span> <span class="output">-43.371948658705</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3><strong>float</strong>(start, end) <a href="#float(start,-end)" name="float(start,-end)" class="header-anchor">#</a></h3>
|
|
<p>Returns a floating point value between <code>start</code> and <code>end</code>, including <code>start</code> but
|
|
excluding <code>end</code>. </p>
|
|
<div class="codehilite"><pre><span></span><span class="k">var</span> <span class="n">random</span> <span class="o">=</span> <span class="vg">Random</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">12345</span><span class="p">)</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">float</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">))</span> <span class="output">3.5317879598062</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">float</span><span class="p">(</span><span class="o">-</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span> <span class="output">-5.9638969913476</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">float</span><span class="p">(</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> <span class="output">-1.3976830804777</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3><strong>int</strong>(end) <a href="#int(end)" name="int(end)" class="header-anchor">#</a></h3>
|
|
<p>Returns an integer between 0 and <code>end</code>, including 0 but excluding <code>end</code>. </p>
|
|
<div class="codehilite"><pre><span></span><span class="k">var</span> <span class="n">random</span> <span class="o">=</span> <span class="vg">Random</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">12345</span><span class="p">)</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">int</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> <span class="output">0</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">int</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span> <span class="output">2</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">int</span><span class="p">(</span><span class="o">-</span><span class="mi">50</span><span class="p">))</span> <span class="output">-22</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3><strong>int</strong>(start, end) <a href="#int(start,-end)" name="int(start,-end)" class="header-anchor">#</a></h3>
|
|
<p>Returns an integer between <code>start</code> and <code>end</code>, including <code>start</code> but excluding
|
|
<code>end</code>. </p>
|
|
<div class="codehilite"><pre><span></span><span class="k">var</span> <span class="n">random</span> <span class="o">=</span> <span class="vg">Random</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">12345</span><span class="p">)</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">int</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">))</span> <span class="output">3</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">int</span><span class="p">(</span><span class="o">-</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span> <span class="output">-6</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">int</span><span class="p">(</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> <span class="output">-2</span>
|
|
</pre></div>
|
|
|
|
|
|
<h3><strong>sample</strong>(list) <a href="#sample(list)" name="sample(list)" class="header-anchor">#</a></h3>
|
|
<p>Selects a random element from <code>list</code>. </p>
|
|
<h3><strong>sample</strong>(list, count) <a href="#sample(list,-count)" name="sample(list,-count)" class="header-anchor">#</a></h3>
|
|
<p>Samples <code>count</code> randomly chosen unique elements from <code>list</code>. </p>
|
|
<p>This uses “random without replacement” sampling—no index in the list will
|
|
be selected more than once. </p>
|
|
<p>Returns a new list of the selected elements. </p>
|
|
<p>It is an error if <code>count</code> is greater than the number of elements in the list. </p>
|
|
<h3><strong>shuffle</strong>(list) <a href="#shuffle(list)" name="shuffle(list)" class="header-anchor">#</a></h3>
|
|
<p>Randomly shuffles the elements in <code>list</code>. The items are randomly re-ordered in
|
|
place. </p>
|
|
<div class="codehilite"><pre><span></span><span class="k">var</span> <span class="n">random</span> <span class="o">=</span> <span class="vg">Random</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">12345</span><span class="p">)</span>
|
|
<span class="k">var</span> <span class="n">list</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">..</span><span class="mi">5</span><span class="p">)</span><span class="o">.</span><span class="n">toList</span>
|
|
<span class="n">random</span><span class="o">.</span><span class="n">shuffle</span><span class="p">(</span><span class="n">list</span><span class="p">)</span>
|
|
<span class="vg">System</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">list</span><span class="p">)</span> <span class="output">[3, 2, 4, 1, 5]</span>
|
|
</pre></div>
|
|
|
|
|
|
<p>Uses the Fisher-Yates algorithm to ensure that all permutations are chosen
|
|
with equal probability. </p>
|
|
<p>Keep in mind that a list with even a modestly large number of elements has an
|
|
astronomically large number of permutations. For example, there are about 10^74
|
|
ways a deck of 56 cards can be shuffled. The random number generator’s internal
|
|
state is not that large, which means there are many permutations it will never
|
|
generate. </p>
|
|
</main>
|
|
</div>
|
|
<footer>
|
|
<div class="page">
|
|
<div class="main-column">
|
|
<p>Wren lives
|
|
<a href="https://github.com/munificent/wren">on GitHub</a>
|
|
— Made with ❤ by
|
|
<a href="http://journal.stuffwithstuff.com/">Bob Nystrom</a> and
|
|
<a href="https://github.com/munificent/wren/blob/master/AUTHORS">friends</a>.
|
|
</p>
|
|
<div class="main-column">
|
|
</div>
|
|
</footer>
|
|
</body>
|
|
</html>
|