Roll
?

Roll (?
) is a monadic scalar function which returns random or pseudorandom numbers. The name Roll comes from the analogy of rolling dice. 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 floatingpoint number between 0 and 1.
Examples
? 4 ⍴ 6 ⍝ Roll four sixsided 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
.
External links
Lessons
 Jupyter Notebook (Run on TryAPL)
Documentation
APL builtins [edit]  

Primitive functions  
Scalar  
Monadic  Conjugate ∙ Negate ∙ Signum ∙ Not ∙ Roll ∙ Type  
Dyadic  Add ∙ Subtract ∙ Times ∙ Divide ∙ Equal to (Xnor) ∙ Not Equal to (Xor) ∙ Minimum ∙ Maximum ∙ Comparison functions ∙ Complex  
NonScalar  
Structural  Shape ∙ Reshape ∙ Tally ∙ Depth ∙ Ravel ∙ Reverse ∙ Raze ∙ Mix ∙ Cut (K) ∙ Pair ∙ Replicate ∙ Partitioned Enclose  
Selection  First ∙ Take ∙ Drop ∙ Unique ∙ Identity ∙ Select ∙ Bracket index  
Selector  Index generator ∙ Interval Index ∙ Indices  
Computational  Match ∙ Not Match ∙ Nub Sieve ∙ Format ∙ Execute  
Primitive operators  Monadic  Each ∙ Replicate ∙ Commute ∙ Function axis  
Dyadic  Beside ∙ Bind ∙ Reverse Compose  
Quad names  
Arrays  Index origin ∙ Migration level  
Functions  
Operators 