```(muse:

APL Numbers
¯¯¯¯¯¯¯¯¯¯¯
Classic APL recognises only "numbers";  it has no interest in their internal
representation in binary integer or floating point form.

Sometimes confused with this internal data type, is the fact that some prim-
itive functions have restricted argument domains. For example, the "Boolean"
functions  ∧ ∨ ⍲ ⍱  take only arrays of numbers in the set 0 1; the items of
the  left  argument  of  reshape (⍴) must be "natural" (non-negative, whole)
numbers  0 1 2 ...;  and the relational functions  < ≤ ≥ >  take  only those
numbers whose imaginary part is 0. We can see this distinction with express-
ions such as:

1 ∧ 2.5-3÷2     ⍝ right argument of ∧ is 0 or 1
1
(-¯3) ⍴ 3       ⍝ left argument of ⍴ is non-negative whole number
3 3 3

As a thought experiment, we could propose an APL that supported only ration-
al, or even only whole, numbers. In the latter case, 21÷3 would return 7 but
21÷2 would generate a domain error. This is analogous to an APL that doesn't
provide complex numbers,  where ¯1*÷3 returns ¯1 but where ¯1*÷2 is a domain
error.

This brings to mind the sequence of generalisation:

N ⊂ Z ⊂ Q ⊂ R ⊂ C ⊂ H ⊂ O.

Prefacing this list with B, the boolean numbers 0 and 1, gives:

B Booleans:                        0 1          ⍝ Boole G. 1815-1864
⊂ N Natural numbers:              0 1 2 ...
⊂ Z Integers:        ... ¯2 ¯1 0 1 2 ...
⊂ Q Rationals:        (4÷3) (¯7÷13) ...
⊂ R Reals:          (*1) (○1) (2*÷2) ...
⊂ C Complex:      3j4 (¯1*÷2) ...
⊂ H Quaternions                 ⍝ Hamilton W.R. 1805-1865
⊂ O Octonions                ⍝ Graves J.T. 1806-1870

At each step, we gain generality in exchange for some loss of structure. For
example, going from R to C to H to O, we lose respectively:  ordering, comm-
utativity and associativity.

This table illustrates the capabilities of an APL system for each of the in-
creasingly general number systems:

┌───┬───┬───┬───┬───┬───┐
│ B │ N │ Z │ Q │ R │ C │
┌───────┼───┼───┼───┼───┼───┼───┤
│ 0∨1   │ Y │ Y │ Y │ Y │ * │ * │
├───────┼───┼───┼───┼───┼───┼───┤
│ 2+3   │ - │ Y │ Y │ Y │ Y │ Y │
├───────┼───┼───┼───┼───┼───┼───┤
│ 2-3   │ - │ - │ Y │ Y │ Y │ Y │
├───────┼───┼───┼───┼───┼───┼───┤
│ 2÷3   │ - │ - │ - │ Y │ Y │ Y │
├───────┼───┼───┼───┼───┼───┼───┤
│ 2*÷2  │ - │ - │ - │ - │ Y │ Y │
├───────┼───┼───┼───┼───┼───┼───┤
│ ¯1*÷2 │ - │ - │ - │ - │ - │ Y │
└───────┴───┴───┴───┴───┴───┴───┘

* GCD (→gcd←) is not meaningful for irrational numbers.  In order to provide
GCD/LCM for its internal floating-point numbers, Dyalog uses as many terms
of their continued fraction (→cfract←) expansion as necessary to produce a
tolerably close rational approximation.

N http://en.wikipedia.org/wiki/Natural_number       →nats←
Z http://en.wikipedia.org/wiki/Integer
Q http://en.wikipedia.org/wiki/Rational_number      →rats←
R http://en.wikipedia.org/wiki/Real_number
C http://en.wikipedia.org/wiki/Complex_number       →cxdraw←
H http://en.wikipedia.org/wiki/Quaternion           →H←
O http://en.wikipedia.org/wiki/Octonian
http://en.wikipedia.org/wiki/Sedenion
)

Back to: contents

Back to: Workspaces
```