Scalar function
A scalar function is one of a class of primitive functions that apply to arguments one element at a time. Dyadic scalar functions pair elements of their arguments based on conformability rules, and thus are subject to scalar extension. In nested array languages scalar functions recursively descend into nested arrays until they can be applied to simple scalars; in flat array languages they usually do not apply inside boxes.
Only a particular valence of a function is labelled "scalar". The scalar monad Not usually shares the glyph ~
with non-scalar dyad Without, and similarly scalar Roll and non-scalar Deal are both written ?
.
Standard scalar functions
Most APLs use a set of scalar functions that was worked out fairly early in APL's development. These are listed in this section.
Monadic function | Glyph | Dyadic function |
---|---|---|
Conjugate | + |
Plus |
Negate | - |
Minus |
Signum or Direction | × |
Times |
Reciprocal | ÷ |
Divide |
Floor | ⌊ |
Minimum |
Ceiling | ⌈ |
Maximum |
Exponential | * |
Power function |
Natural Logarithm | ⍟ |
Logarithm |
Magnitude or Absolute value | | |
Residue |
Pi Times | ○ |
Circle function |
Factorial | ! |
Binomial coefficient or combination function |
Roll | ? |
|
Not | ~ |
|
∧ |
Logical And | |
∨ |
Logical Or | |
⍲ |
Nand | |
⍱ |
Nor | |
< |
Less than | |
≤ |
Less than or equal to | |
= |
Equal to | |
≥ |
Greater than or equal to | |
> |
Greater than | |
≠ |
Not equal to |
Additional scalar functions
Very few additional scalar functions have been added later in various dialects:
Monadic function | Glyph | Dyadic function |
---|---|---|
Square Root | √ |
Nth Root |
Type | ∊ or ⊤ |
|
∧ |
Lowest Common Multiple (LCM) | |
∨ |
Greatest Common Divisor (GCD) |
User defined scalar functions
In nested array model dialects with the Depth operator (⍥
or in J, Level at L:
), any function can be used as a scalar function (that is, be applied to all simple scalars) using the derived monadic operator perv←⍥0
:
perv←⍥0 NonScalarFn←{⍵:'t' ⋄ 'f'} NonScalarFn perv (0 1) 1 (⊂1 0) ┌──┬─┬────┐ │ft│t│┌──┐│ │ │ ││tf││ │ │ │└──┘│ └──┴─┴────┘
In dialects that support dfns, this operator can be defined[1] as:
perv←{⍺←⊢ ⍝ Scalar pervasion 1=≡⍺ ⍵ ⍵:⍺ ⍺⍺ ⍵ ⍝ (⍺ and) ⍵ depth 0: operand fn application ⍺ ∇¨⍵ ⍝ (⍺ or) ⍵ deeper: recursive traversal. }
External links
- Scalar Functions (part of APL a Day)
APL features [edit] | |
---|---|
Built-ins | Primitives (functions, operators) ∙ Quad name |
Array model | Shape ∙ Rank ∙ Depth ∙ Bound ∙ Index (Indexing) ∙ Axis ∙ Ravel ∙ Ravel order ∙ Element ∙ Scalar ∙ Vector ∙ Matrix ∙ Simple scalar ∙ Simple array ∙ Nested array ∙ Cell ∙ Major cell ∙ Subarray ∙ Empty array ∙ Prototype |
Data types | Number (Boolean, Complex number) ∙ Character (String) ∙ Box ∙ Namespace ∙ Function array |
Concepts and paradigms | Conformability (Scalar extension, Leading axis agreement) ∙ Scalar function (Pervasion) ∙ Identity element ∙ Complex floor ∙ Array ordering (Total) ∙ Tacit programming (Function composition, Close composition) ∙ Glyph ∙ Leading axis theory ∙ Major cell search ∙ First-class function |
Errors | LIMIT ERROR ∙ RANK ERROR ∙ SYNTAX ERROR ∙ DOMAIN ERROR ∙ LENGTH ERROR ∙ INDEX ERROR ∙ VALUE ERROR ∙ EVOLUTION ERROR |
- ↑ John Scholes, perv (Scalar pervasion). dfns workspace, 2019-02-17.