4,509
edits
m (Text replacement - "<source" to "<syntaxhighlight") |
m (Text replacement - "</source>" to "</syntaxhighlight>") |
||
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]]; <syntaxhighlight lang=apl inline>0 ≠ ⎕NC 'leftArg'</ | 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 <syntaxhighlight lang=apl inline>⍺</ | [[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 <syntaxhighlight lang=apl inline>⍺ ← defaultValue</ | 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!] | ||
Line 19: | Line 19: | ||
⍵ * ÷⍺ | ⍵ * ÷⍺ | ||
} | } | ||
</ | </syntaxhighlight> | ||
We can also define the [[Over]] operator with <syntaxhighlight lang=apl inline>⍺</ | 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!] | ||
Line 29: | Line 29: | ||
(⍵⍵ ⍺) ⍺⍺ (⍵⍵ ⍵) | (⍵⍵ ⍺) ⍺⍺ (⍵⍵ ⍵) | ||
} | } | ||
</ | </syntaxhighlight> | ||
== External links == | == External links == |