Scalar function: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
Miraheze>Adám Brudzewsky
No edit summary
m (Text replacement - "</source>" to "</syntaxhighlight>")
 
(24 intermediate revisions by 5 users not shown)
Line 1: Line 1:
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 model|nested]] array languages scalar functions recursively descend into nested arrays until they can be applied to [[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 <source lang=apl inline>~</source> with non-scalar dyad [[Without]], and similarly scalar [[Roll]] and non-scalar [[Deal]] are both written <source lang=apl inline>?</source>.
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 7: Line 7:
Most APLs use a set of scalar functions that was worked out fairly early in APL's development. These are listed in this section.
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 functions ===
{| class=wikitable
 
! Monadic function !! Glyph !! Dyadic function
{|
| <source lang=apl inline>+</source> || [[Conjugate]]
|-
|-
| <source lang=apl inline>-</source> || [[Negate]]
| [[Conjugate]] || <syntaxhighlight lang=apl inline>+</syntaxhighlight> || [[Plus]]
|-
|-
| <source lang=apl inline>×</source> || [[Signum]] or Direction
| [[Negate]] || <syntaxhighlight lang=apl inline>-</syntaxhighlight> || [[Minus]]
|-
|-
| <source lang=apl inline>÷</source> || [[Reciprocal]]
| [[Signum]] or Direction || <syntaxhighlight lang=apl inline>×</syntaxhighlight> || [[Times]]
|-
|-
| <source lang=apl inline></source> || [[Floor]]
| [[Reciprocal]] || <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || [[Divide]]
|-
|-
| <source lang=apl inline></source> || [[Ceiling]]
| [[Floor]] || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Minimum]]
|-
|-
| <source lang=apl inline>*</source> || [[Exponential]]
| [[Ceiling]] || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Maximum]]
|-
|-
| <source lang=apl inline></source> || [[Natural Logarithm]]
| [[Exponential]] || <syntaxhighlight lang=apl inline>*</syntaxhighlight> || [[Power function]]
|-
|-
| <source lang=apl inline><nowiki>|</nowiki></source> || [[Magnitude]]
| [[Natural Logarithm]] || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Logarithm]]
|-
|-
| <source lang=apl inline>!</source> || [[Factorial]]
| [[Magnitude]] or Absolute value || <syntaxhighlight lang=apl inline>|</syntaxhighlight> || [[Residue]]
|-
|-
| <source lang=apl inline>○</source> || [[Pi Times]]
| [[Pi Times]] || <syntaxhighlight lang=apl inline>○</syntaxhighlight> || [[Circle function]]
|-
|-
| <source lang=apl inline>~</source> || [[Not]]
| [[Factorial]] || <syntaxhighlight lang=apl inline>!</syntaxhighlight> || [[Binomial]] coefficient or combination function
|-
|-
| <source lang=apl inline>∊</source> || [[Type]]
| [[Roll]] || <syntaxhighlight lang=apl inline>?</syntaxhighlight> ||
|}
 
=== Dyadic functions ===
 
{|
| <source lang=apl inline>+</source> || [[Plus]]
|-
|-
| <source lang=apl inline>-</source> || [[Minus]]
| [[Not]] || <syntaxhighlight lang=apl inline>~</syntaxhighlight> ||
|-
|-
| <source lang=apl inline>×</source> || [[Times]]
| || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Logical And]]
|-
|-
| <source lang=apl inline>÷</source> || [[Divide]]
| || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Logical Or]]
|-
|-
| <source lang=apl inline></source> || [[Minimum]]
| || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Nand]]
|-
|-
| <source lang=apl inline></source> || [[Maximum]]
| || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Nor]]
|-
|-
| <source lang=apl inline>*</source> || [[Power function]]
| || <syntaxhighlight lang=apl inline><</syntaxhighlight> || [[Less than]]
|-
|-
| <source lang=apl inline></source> || [[Logarithm]]
| || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Less than or equal to]]
|-
|-
| <source lang=apl inline><nowiki>|</nowiki></source> || [[Residue]]
| || <syntaxhighlight lang=apl inline>=</syntaxhighlight> || [[Equal to]]
|-
|-
| <source lang=apl inline>!</source> || [[Binomial]] coefficient or combination function
| || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Greater than or equal to]]
|-
|-
| <source lang=apl inline></source> || [[Circle function]]
| || <syntaxhighlight lang=apl inline>></syntaxhighlight> || [[Greater than]]
|-
|-
| <source lang=apl inline></source> || [[Logical And]]
| || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Not equal to]]
|}
 
== Additional scalar functions ==
 
Very few additional scalar functions have been added later in various dialects:
{| class=wikitable
! Monadic function !! Glyph !! Dyadic function
|-
|-
| <source lang=apl inline></source> || [[Logical Or]]
| [[Square Root]] || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Nth Root]]
|-
|-
| <source lang=apl inline></source> || [[Nand]]
| [[Type]] || <syntaxhighlight lang=apl inline></syntaxhighlight> or <syntaxhighlight lang=apl inline>⊤</syntaxhighlight> ||
|-
|-
| <source lang=apl inline></source> || [[Nor]]
| || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Lowest Common Multiple]] (LCM)
|-
|-
| <source lang=apl inline><</source> || [[Less than]]
| || <syntaxhighlight lang=apl inline></syntaxhighlight> || [[Greatest Common Divisor]] (GCD)
|-
|-
| <source lang=apl inline>≤</source> || [[Less than or equal to]]
| [[Case fold]] || <syntaxhighlight lang=apl inline>⎕C</syntaxhighlight> || [[Case map]]
|-
 
| <source lang=apl inline>=</source> || [[Equal to]]
|-
| <source lang=apl inline></source> || [[Greater than or equal to]]
|-
| <source lang=apl inline>></source> || [[Greather than]]
|-
|-
| <source lang=apl inline>≠</source> || [[Not equal to]]
|}
|}


{{APL programming language}}
== 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://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}}[[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


APL features [edit]
Built-ins Primitives (functions, operators) ∙ Quad name
Array model ShapeRankDepthBoundIndex (Indexing) ∙ AxisRavelRavel orderElementScalarVectorMatrixSimple scalarSimple arrayNested arrayCellMajor cellSubarrayEmpty arrayPrototype
Data types Number (Boolean, Complex number) ∙ Character (String) ∙ BoxNamespaceFunction array
Concepts and paradigms Conformability (Scalar extension, Leading axis agreement) ∙ Scalar function (Pervasion) ∙ Identity elementComplex floorArray ordering (Total) ∙ Tacit programming (Function composition, Close composition) ∙ GlyphLeading axis theoryMajor cell searchFirst-class function
Errors LIMIT ERRORRANK ERRORSYNTAX ERRORDOMAIN ERRORLENGTH ERRORINDEX ERRORVALUE ERROREVOLUTION ERROR