(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_numbernats←
    Z http://en.wikipedia.org/wiki/Integer
    Q http://en.wikipedia.org/wiki/Rational_numberrats←
    R http://en.wikipedia.org/wiki/Real_number
    C http://en.wikipedia.org/wiki/Complex_numbercxdraw←
    H http://en.wikipedia.org/wiki/QuaternionH←
    O http://en.wikipedia.org/wiki/Octonian
      http://en.wikipedia.org/wiki/Sedenion
)

Back to: contents

Back to: Workspaces