Scalar function: Difference between revisions
(→External links: Roger's forum post) |
m (Text replacement - "</source>" to "</syntaxhighlight>") |
||
(7 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
A '''scalar function''' is one of a class of [[primitive function]]s that apply to [[argument]]s 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 model|nested]] array languages, scalar functions [[pervasion|pervade]] any [[nested array]]s by [[recursion|recursively]] descending into them until reaching [[simple scalars]]; in [[Flat array model|flat]] array languages they usually do not apply inside [[boxes]]. | A '''scalar function''' is one of a class of [[primitive function]]s that apply to [[argument]]s 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 model|nested]] array languages, scalar functions [[pervasion|pervade]] any [[nested array]]s by [[recursion|recursively]] descending into them until reaching [[simple scalars]]; in [[Flat array model|flat]] array languages they usually do not apply inside [[boxes]]. Functions which are not scalar, are called [[mixed function]]s. | ||
Only a particular [[valence]] of a function is labelled "scalar". The scalar monad [[Not]] usually shares the glyph < | Only a particular [[valence]] of a function is labelled "scalar". The scalar monad [[Not]] usually shares the glyph <syntaxhighlight lang=apl inline>~</syntaxhighlight> with non-scalar dyad [[Without]], and similarly scalar [[Roll]] and non-scalar [[Deal]] are both written <syntaxhighlight lang=apl inline>?</syntaxhighlight>. | ||
== Standard scalar functions == | == Standard scalar functions == | ||
Line 10: | Line 10: | ||
! Monadic function !! Glyph !! Dyadic function | ! Monadic function !! Glyph !! Dyadic function | ||
|- | |- | ||
| [[Conjugate]] || < | | [[Conjugate]] || <syntaxhighlight lang=apl inline>+</syntaxhighlight> || [[Plus]] | ||
|- | |- | ||
| [[Negate]] || < | | [[Negate]] || <syntaxhighlight lang=apl inline>-</syntaxhighlight> || [[Minus]] | ||
|- | |- | ||
| [[Signum]] or Direction || < | | [[Signum]] or Direction || <syntaxhighlight lang=apl inline>×</syntaxhighlight> || [[Times]] | ||
|- | |- | ||
| [[Reciprocal]] || < | | [[Reciprocal]] || <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || [[Divide]] | ||
|- | |- | ||
| [[Floor]] || < | | [[Floor]] || <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || [[Minimum]] | ||
|- | |- | ||
| [[Ceiling]] || < | | [[Ceiling]] || <syntaxhighlight lang=apl inline>⌈</syntaxhighlight> || [[Maximum]] | ||
|- | |- | ||
| [[Exponential]] || < | | [[Exponential]] || <syntaxhighlight lang=apl inline>*</syntaxhighlight> || [[Power function]] | ||
|- | |- | ||
| [[Natural Logarithm]] || < | | [[Natural Logarithm]] || <syntaxhighlight lang=apl inline>⍟</syntaxhighlight> || [[Logarithm]] | ||
|- | |- | ||
| [[Magnitude]] or Absolute value || < | | [[Magnitude]] or Absolute value || <syntaxhighlight lang=apl inline>|</syntaxhighlight> || [[Residue]] | ||
|- | |- | ||
| [[Pi Times]] || < | | [[Pi Times]] || <syntaxhighlight lang=apl inline>○</syntaxhighlight> || [[Circle function]] | ||
|- | |- | ||
| [[Factorial]] || < | | [[Factorial]] || <syntaxhighlight lang=apl inline>!</syntaxhighlight> || [[Binomial]] coefficient or combination function | ||
|- | |- | ||
| [[Roll]] || < | | [[Roll]] || <syntaxhighlight lang=apl inline>?</syntaxhighlight> || | ||
|- | |- | ||
| [[Not]] || < | | [[Not]] || <syntaxhighlight lang=apl inline>~</syntaxhighlight> || | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>∧</syntaxhighlight> || [[Logical And]] | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>∨</syntaxhighlight> || [[Logical Or]] | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>⍲</syntaxhighlight> || [[Nand]] | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>⍱</syntaxhighlight> || [[Nor]] | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline><</syntaxhighlight> || [[Less than]] | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>≤</syntaxhighlight> || [[Less than or equal to]] | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>=</syntaxhighlight> || [[Equal to]] | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>≥</syntaxhighlight> || [[Greater than or equal to]] | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>></syntaxhighlight> || [[Greater than]] | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>≠</syntaxhighlight> || [[Not equal to]] | ||
|} | |} | ||
Line 63: | Line 63: | ||
! Monadic function !! Glyph !! Dyadic function | ! Monadic function !! Glyph !! Dyadic function | ||
|- | |- | ||
| [[Square Root]] || < | | [[Square Root]] || <syntaxhighlight lang=apl inline>√</syntaxhighlight> || [[Nth Root]] | ||
|- | |- | ||
| [[Type]] || < | | [[Type]] || <syntaxhighlight lang=apl inline>∊</syntaxhighlight> or <syntaxhighlight lang=apl inline>⊤</syntaxhighlight> || | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>∧</syntaxhighlight> || [[Lowest Common Multiple]] (LCM) | ||
|- | |- | ||
| || < | | || <syntaxhighlight lang=apl inline>∨</syntaxhighlight> || [[Greatest Common Divisor]] (GCD) | ||
|- | |||
| [[Case fold]] || <syntaxhighlight lang=apl inline>⎕C</syntaxhighlight> || [[Case map]] | |||
|- | |- | ||
|} | |} | ||
== External links == | == External links == | ||
* [https://www.sacrideo.us/apl-a-day-7-scalar-functions/ Scalar Functions] (part of [https://www.sacrideo.us/tag/apl-a-day/ APL a Day]) | * [https://www.sacrideo.us/apl-a-day-7-scalar-functions/ Scalar Functions] (part of [https://www.sacrideo.us/tag/apl-a-day/ APL a Day]) | ||
* [https://forums.dyalog.com/viewtopic.php?f=30&t=1621 Scalar functions] by [[Roger Hui]] | * [https://forums.dyalog.com/viewtopic.php?f=30&t=1621 Scalar functions] by [[Roger Hui]] | ||
* [https://help.dyalog.com/latest/#Language/Primitive%20Functions/Scalar%20Functions.htm Scalar Functions] in [[Dyalog APL]] documentation | |||
{{APL features}} | {{APL features}}[[Category:Kinds of functions]][[Category:Scalar functions| ]] |
Latest revision as of 22:25, 10 September 2022
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 pervade any nested arrays by recursively descending into them until reaching simple scalars; in flat array languages they usually do not apply inside boxes. Functions which are not scalar, are called mixed functions.
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) | |
Case fold | ⎕C |
Case map |
External links
- Scalar Functions (part of APL a Day)
- Scalar functions by Roger Hui
- Scalar Functions in Dyalog APL documentation
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 |