# Difference between revisions of "Roll"

Miraheze>Adám Brudzewsky |
Miraheze>Adám Brudzewsky |
||

Line 1: | Line 1: | ||

− | {{Primitive|?|Roll}} is a [[monadic]] [[scalar function]] which returns random or pseudo-random numbers. Each [[scalar]] in the argument must be a | + | {{Primitive|?|Roll}} is a [[monadic]] [[scalar function]] which returns random or pseudo-random numbers. Each [[scalar]] in the argument must be a positive integer, <source lang=apl inline>n</source>, and Roll chooses one of the first <source lang=apl inline>n</source> [[Index|indices]]. Some dialects allow <source lang=apl inline>n</source> to be zero, in which case Roll chooses a floating-point number between 0 and 1. |

== Examples == | == Examples == | ||

Line 15: | Line 15: | ||

== Description == | == Description == | ||

− | Each [[scalar]] in the argument to Roll must be a | + | Each [[scalar]] in the argument to Roll must be a positive integer. |

The result of Roll on each number <source lang=apl inline>n</source> is either | The result of Roll on each number <source lang=apl inline>n</source> is either | ||

− | + | * One of the elements of <source lang=apl inline>⍳n</source> chosen uniformly at random; or | |

− | * One of the elements of <source lang=apl inline>⍳n</source> chosen uniformly at random, | + | * A real number between 0 and 1 chosen uniformly at random, if <source lang=apl inline>n</source> 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. | ||

Line 29: | Line 29: | ||

=== Lessons === | === Lessons === | ||

− | [https://chat.stackexchange.com/transcript/52405?m=41303127#41303127 APL Cultivation] | + | * [https://chat.stackexchange.com/transcript/52405?m=41303127#41303127 APL Cultivation] |

+ | |||

+ | * [https://nbviewer.jupyter.org/github/Dyalog/dyalog-jupyter-notebooks/blob/master/Random%20Numbers.ipynb Jupyter Notebook] | ||

=== Documentation === | === Documentation === | ||

− | [http://help.dyalog.com/latest/Content/Language/Primitive%20Functions/Roll.htm Dyalog] | + | * [http://help.dyalog.com/latest/Content/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] |

− | + | * [https://www.jsoftware.com/help/dictionary/d640.htm J Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/query J NuVoc] |

## Revision as of 19:52, 29 October 2019

Template:Primitive is a monadic scalar function which returns random or pseudo-random numbers. Each scalar in the argument must be a positive integer, `n`

, and Roll chooses one of the first `n`

indices. Some dialects allow `n`

to be zero, in which case Roll chooses a floating-point number between 0 and 1.

## Examples

```
? 4 ⍴ 6 ⍝ Roll four six-sided dice
1 4 1 1
? 3 2 1 0 ⍝ The result for 1 is always 1
2 2 1 0.9637543707
{⍵[?8⍴≢⍵]} 'Hello' ⍝ Choose 8 random letters
eeHHHolo
```

## Description

Each scalar in the argument to Roll must be a positive integer.

The result of Roll on each number `n`

is either

- One of the elements of
`⍳n`

chosen uniformly at random; or - A real number between 0 and 1 chosen uniformly at random, if
`n`

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.

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 `⎕RL`

.