4,577
edits
No edit summary |
m (Text replacement - "</source>" to "</syntaxhighlight>") |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{Built-in|Roll|?}} is a [[monadic]] [[scalar function]] which returns random or pseudo-random numbers. The name ''Roll'' comes from the analogy of rolling dice. Each [[scalar]] in the argument must be a positive integer, < | {{Built-in|Roll|?}} is a [[monadic]] [[scalar function]] which returns random or pseudo-random numbers. The name ''Roll'' comes from the analogy of rolling dice. Each [[scalar]] in the argument must be a positive integer, <syntaxhighlight lang=apl inline>n</syntaxhighlight>, and Roll chooses one of the first <syntaxhighlight lang=apl inline>n</syntaxhighlight> [[Index|indices]]. Some dialects allow <syntaxhighlight lang=apl inline>n</syntaxhighlight> to be zero, in which case Roll chooses a floating-point number between 0 and 1. Roll shares its [[glyph]] with the other random-result function, [[Deal]]. | ||
== Examples == | == Examples == | ||
< | <syntaxhighlight lang=apl> | ||
? 4 ⍴ 6 ⍝ Roll four six-sided dice | ? 4 ⍴ 6 ⍝ Roll four six-sided dice | ||
1 4 1 1 | 1 4 1 1 | ||
Line 10: | Line 10: | ||
{⍵[?8⍴≢⍵]} 'Hello' ⍝ Choose 8 random letters | {⍵[?8⍴≢⍵]} 'Hello' ⍝ Choose 8 random letters | ||
eeHHHolo | eeHHHolo | ||
</ | </syntaxhighlight> | ||
{{Works in|[[Dyalog APL]], [[NARS2000]], [[dzaima/APL]]}} | {{Works in|[[Dyalog APL]], [[NARS2000]], [[dzaima/APL]]}} | ||
Line 17: | Line 17: | ||
Each [[scalar]] in the argument to Roll must be a positive integer. | Each [[scalar]] in the argument to Roll must be a positive integer. | ||
The result of Roll on each number < | The result of Roll on each number <syntaxhighlight lang=apl inline>n</syntaxhighlight> is either | ||
* One of the elements of < | * One of the elements of <syntaxhighlight lang=apl inline>⍳n</syntaxhighlight> chosen uniformly at random; or | ||
* A real number between 0 and 1 chosen uniformly at random, if < | * A real number between 0 and 1 chosen uniformly at random, if <syntaxhighlight lang=apl inline>n</syntaxhighlight> is 0 and the dialect has this extension. | ||
Because [[Iota]] depends on [[index origin]], Roll depends on index origin unless every number in the argument is 0. | Because [[Iota]] depends on [[index origin]], Roll depends on index origin unless every number in the argument is 0. | ||
The choices made by Roll do not have to be truly random: they may be pseudorandom (generated by a deterministic but difficult to predict algorithm) or taken from the operating system. They way random numbers are generated is controlled by the [[random link]] < | The choices made by Roll do not have to be truly random: they may be pseudorandom (generated by a deterministic but difficult to predict algorithm) or taken from the operating system. They way random numbers are generated is controlled by the [[random link]] <syntaxhighlight lang=apl inline>⎕RL</syntaxhighlight>. Traditionally, APL uses the [[wikipedia:Lehmer random number generator|Lehmer random number generator]], but [[Dyalog APL]] defaults to the allow choosing a different random number generator and defaults to the [[wikipedia:Mersenne Twister|Mersenne Twister]]. | ||
== External links == | == External links == | ||
Line 35: | Line 35: | ||
=== Documentation === | === Documentation === | ||
* [ | * [https://help.dyalog.com/latest/index.htm#Language/Primitive%20Functions/Roll.htm Dyalog] | ||
* [http://microapl.com/apl_help/ch_020_020_170.htm APLX] | * [http://microapl.com/apl_help/ch_020_020_170.htm APLX] |