# !?|⌈⌊⊥⊤⊣⊢

## Contents

`!?|⌈⌊⊥⊤⊣⊢`

#

## Factorial, binomial `!`

#

Monadic `!`

is factorial. Note that it goes on the left (like all other monadic APL functions) as opposed to mathematics’ \(!\).

Dyadic `A!B`

is binomial. It is the number of ways to take `A`

items from a bag of `B`

items, generalised to be the binomial function.

```
!12 ⍝ 12 factorial
2!8 ⍝ how many ways can we select 2 from 8?
```

479001600

28

## Roll, deal `?`

#

Monadic `?B`

is roll. It returns a random integer among the first `B`

integers. `?0`

returns a random float between (but not including) 0 and 1:

```
?6 6 6 ⍝ roll three six-sided dice
?0 ⍝ random float between 0-1, excluding 0 and 1
```

4 3 4

0.3205466592

Dyadic `A?B`

is deal. It returns a random one of the ways `A!B`

counted. I.e. it returns `A`

random numbers among the `B`

first integers.

```
10?10 ⍝ 1-10 in random order
```

1 6 9 2 4 7 8 3 5 10

Note that it deals from the set `⍳B`

, so it’s dependent on your `⎕IO`

setting:

```
10?10 ⊣ ⎕IO←0 ⍝ Now we should get 0-9
⎕IO←1 ⍝ Reset ⎕IO to default
```

8 0 3 6 5 2 7 9 4 1

## Magnitude, residue `|`

#

Monadic `|`

is magnitude, also called the absolute value, \(|x|\):

```
|¯97
|3 5 ¯7 ¯8 7 ¯2
```

97

3 5 7 8 7 2

Dyadic `A|B`

is residue, also known as the *division remainder* (“mod”) when `B`

is divided by `A`

. Note the reversed order of arguments. “normal” mod is `|⍨`

.

```
2|⍳10 ⍝ odd numbers in 1-10
```

1 0 1 0 1 0 1 0 1 0

## Ceiling, maximum `⌈`

#

Monadic `⌈`

is ceiling, \(⌈x⌉\),

```
⌈3.14159256
```

4

Dyadic `A⌈B`

is maximum:

```
15⌈23
```

23

## Floor, minimum `⌊`

#

Monadic `⌊`

is floor, and the dyadic is minimum,

```
⌊3.14159256
15⌊23
```

3

15

## Decode `⊥`

#

`A⊥B`

is decode. It evaluates digits `B`

as (mixed) base `A`

, e.g,

```
2⊥1 0 1 0 1 0 ⍝ decode binary to decimal
```

42

## Encode `⊤`

#

`A⊤B`

, or encode, is the inverse of `⊥`

, turning `B`

into a list(s) of digits in (mixed) base `A`

,

```
24 60 60⊤10000 ⍝ seconds to hour, minutes, seconds
```

2 46 40

Ten thousand seconds is the same as 2 hours, 46 minutes and 40 seconds.

## Left, right `⊣⊢`

#

Dyadic `⊣`

is the left argument unmodified. Monadically, it just returns its sole argument. Dyadic `⊢`

is the right argument unmodified. Monadically, it just returns its sole argument.