4,494
edits
m (Text replacement - "help.dyalog.com/latest/#Language/Primitive%20Operators/" to "help.dyalog.com/latest/#Language/I%20Beam%20Functions/") |
m (Text replacement - "</source>" to "</syntaxhighlight>") |
||
(3 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
=== Tradfns === | === Tradfns === | ||
In some APLs, for example [[APL*PLUS]], [[tradfn]]s that declare a left argument in the [[function header]] are always ambivalent, and the code needs to check whether a left argument was supplied by the left argument name's [[name class]]; < | In some APLs, for example [[APL*PLUS]], [[tradfn]]s that declare a left argument in the [[function header]] are always ambivalent, and the code needs to check whether a left argument was supplied by the left argument name's [[name class]]; <syntaxhighlight lang=apl inline>0 ≠ ⎕NC 'leftArg'</syntaxhighlight>. Other APLs, for example [[Dyalog APL]], will not allow calling such a function monadically, unless the header has curly braces around the left argument name to indicate that it is optional; <syntaxhighlight lang=apl inline> result ← {leftArg} FnName rightArg</syntaxhighlight>. Then too, they need to query the name class, or, unique for Dyalog APL, use a specialised ''Called Monadically'' [[I-beam]], <syntaxhighlight lang=apl inline>900⌶⍬</syntaxhighlight>.<ref>[[Dyalog APL]] Language Reference Guide > The I-Beam Operator > [https://help.dyalog.com/latest/#Language/I%20Beam%20Functions/Called%20Monadically.htm Called Monadically]</ref> | ||
=== Dfns === | === Dfns === | ||
[[Dfn]]s are always ambivalent, even if they reference < | [[Dfn]]s are always ambivalent, even if they reference <syntaxhighlight lang=apl inline>⍺</syntaxhighlight>. (This is in contrast with [[dop]]s which have a fixed [[operator valence]] determined by the presence of an unquoted <syntaxhighlight lang=apl inline>⍵⍵</syntaxhighlight> in their code.) Like tradfns, the dfn can check the name class (<syntaxhighlight lang=apl inline>0 ≠ ⎕NC '⍺'</syntaxhighlight>). | ||
However, most APLs that support dfns also allow a statement of the structure < | However, most APLs that support dfns also allow a statement of the structure <syntaxhighlight lang=apl inline>⍺ ← defaultValue</syntaxhighlight> which skipped if the function was called dyadically.<ref>[[Dyalog APL]] Programming Reference Guide > Defined Functions & Operators > Direct Functions & Operators > [https://help.dyalog.com/latest/#Language/Defined%20Functions%20and%20Operators/DynamicFunctions/Default%20Left%20Argument.htm Default Left Argument]</ref> This syntax also allows assigning a function, or even an operator, to <syntaxhighlight lang=apl inline>⍺</syntaxhighlight>, thus streamlining many ambivalent definitions. For example, we can create a Nth root function which defaults to being the square root when used monadically: | ||
[https://tio.run/##SyzI0U2pTMzJT///Pyg/v@RR24RqLgUgeNS7C8g2grK3KmgpHN4OFOOqhahTMDQw4DJWADONzAE Try it online!] | [https://tio.run/##SyzI0U2pTMzJT///Pyg/v@RR24RqLgUgeNS7C8g2grK3KmgpHN4OFOOqhahTMDQw4DJWADONzAE Try it online!] | ||
< | <syntaxhighlight lang=apl> | ||
Root←{ | Root←{ | ||
⍺←2 | ⍺←2 | ||
⍵ * ÷⍺ | ⍵ * ÷⍺ | ||
} | } | ||
</ | </syntaxhighlight> | ||
We can also define the [[Over]] operator with < | We can also define the [[Over]] operator with <syntaxhighlight lang=apl inline>⍺</syntaxhighlight> defaulting to be an operator that skips its operand: | ||
[https://tio.run/##SyzI0U2pTMzJT///378stehR24RqLgUgeNS7C8R@1LtV4VF3C5jbu6sWLKUBFASL9@7ShEogiW3V5Kr9/19XAWSagsbh6Y96V2gqGHOZKqAJmQAA Try it online!] | [https://tio.run/##SyzI0U2pTMzJT///378stehR24RqLgUgeNS7C8R@1LtV4VF3C5jbu6sWLKUBFASL9@7ShEogiW3V5Kr9/19XAWSagsbh6Y96V2gqGHOZKqAJmQAA Try it online!] | ||
< | <syntaxhighlight lang=apl> | ||
Over←{ | Over←{ | ||
⍺←{⍵ ⋄ ⍺⍺} | ⍺←{⍵ ⋄ ⍺⍺} | ||
(⍵⍵ ⍺) ⍺⍺ (⍵⍵ ⍵) | (⍵⍵ ⍺) ⍺⍺ (⍵⍵ ⍵) | ||
} | } | ||
</ | </syntaxhighlight> | ||
== External links == | == External links == | ||
Line 36: | Line 36: | ||
=== Documentation === | === Documentation === | ||
* [http://microapl.com/apl_help/ch_020_010_070.htm APLX] | * [http://microapl.com/apl_help/ch_020_010_070.htm APLX] | ||
* [https://help.dyalog.com/latest/#Language/Defined%20Functions%20and%20Operators/Model%20Syntax.htm Dyalog] | * [https://help.dyalog.com/latest/#Language/Defined%20Functions%20and%20Operators/TradFns/Model%20Syntax.htm Dyalog] | ||
== References == | == References == |