Difference between revisions of "Scalar function"
(→User defined scalar functions: Remove incorrect information about J and dzaima/APL) 
(Remove derived op to work in dzaima/APL) 

Line 73:  Line 73:  
}  }  
== User defined scalar functions ==  == User defined scalar functions ==  
−  In [[nested array model]] dialects with the [[Depth (operator)Depth]] operator (<source lang=apl inline>⍥</source>), any function can be used as a scalar function (that is, be applied to all simple scalars) using the  +  In [[nested array model]] dialects with the [[Depth (operator)Depth]] operator (<source lang=apl inline>⍥</source>), any function can be used as a scalar function (that is, be applied to all simple scalars) using the <source lang=apl inline>perv←⍥0</source>: 
−  [https://tio.run/##SyzI0U2pTMzJT9dNrShJzUtJTfn/  +  [https://tio.run/##SyzI0U2pTMzJT9dNrShJzUtJTfn/qKPtUduE6kd9U4HUo56mlMzigke9u2ofdbcAxYJdgUR4sLprWWpeibqGenBqcXFmfl5AUSaQq6AO1KyuyfWoo70CqNk5PyVVoeK/X35ecHJiTmKRWx7Y4N6tVupAtUDzFNTT1Gu5NJAV9C410FTQMFAw1FQwVNB41NVkqGCgCXRTOxfItEe9a/4DAA Try it online!] 
<source lang=apl>  <source lang=apl>  
−  
NonScalarFn←{⍵:'t' ⋄ 'f'}  NonScalarFn←{⍵:'t' ⋄ 'f'}  
−  +  (NonScalarFn⍥0) (0 1) 1 (⊂1 0)  
┌──┬─┬────┐  ┌──┬─┬────┐  
│ft│t│┌──┐│  │ft│t│┌──┐│  
Line 87:  Line 86:  
└──┴─┴────┘  └──┴─┴────┘  
</source>  </source>  
−  {{Works in[[Extended Dyalog APL]]}}  +  {{Works in[[Extended Dyalog APL]], [[dzaima/APL]]}} 
In dialects that support [[dfn]]s, this operator can be defined<ref>[[John Scholes]], [https://dfns.dyalog.com/n_perv.htm perv] (Scalar pervasion). dfns workspace, 20190217.</ref> as:  In dialects that support [[dfn]]s, this operator can be defined<ref>[[John Scholes]], [https://dfns.dyalog.com/n_perv.htm perv] (Scalar pervasion). dfns workspace, 20190217.</ref> as:  
Revision as of 08:44, 1 April 2020
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 nonscalar dyad Without, and similarly scalar Roll and nonscalar Deal are both written ?
.
Contents
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 (⍥
), any function can be used as a scalar function (that is, be applied to all simple scalars) using the perv←⍥0
:
NonScalarFn←{⍵:'t' ⋄ 'f'}
(NonScalarFn⍥0) (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]  

Builtins  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 
Concepts and paradigms  Leading axis theory ∙ Scalar extension ∙ Conformability ∙ Leading axis agreement ∙ Scalar function ∙ Pervasion ∙ Glyph ∙ Identity element ∙ Complex floor ∙ Total array ordering 
Errors  LIMIT ERROR ∙ RANK ERROR ∙ SYNTAX ERROR ∙ DOMAIN ERROR ∙ LENGTH ERROR ∙ INDEX ERROR ∙ VALUE ERROR 
 ↑ John Scholes, perv (Scalar pervasion). dfns workspace, 20190217.