3,038
edits
m (Marshall moved page Direct definition (NARS) to Direct definition (operator): Also appears in Iverson publications) |
(Rework to include Iverson's versions of the operator) |
||
Line 1: | Line 1: | ||
:''The [[Del]] glyph <code>∇</code> is more commonly used for [[dfn]] recursion or to indicate a [[defined function]].'' | :''The [[Del]] glyph <code>∇</code> is more commonly used for [[dfn]] recursion or to indicate a [[defined function]].'' | ||
{{Built-in|Direct definition|∇}}, | {{Built-in|Direct definition|∇}}, or '''function definition''', is a [[primitive]] [[dyadic operator]] that defines an [[anonymous function]] based on source [[string]]s. Its left operand is the source for the function's [[dyadic]] case and the right is the source for the [[monadic]] case. It appears in [[NARS]] and several publications by [[Ken Iverson]]: an [[APL81]] paper with Peter Wooster,<ref>[[Ken Iverson]] and Peter Wooster. [https://dl.acm.org/doi/abs/10.1145/390007.805349 A function definition operator] at [[APL81]].</ref> [[Rationalized APL]], and [[A Dictionary of APL]]. Definitions vary, but in all cases, the format of a source string is similar to that used in the informal [[Direct definition (notation)|direct definition notation]], with <syntaxhighlight lang=apl inline>⍺</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍵</syntaxhighlight> for the left and right [[argument]]s. Another token, <syntaxhighlight lang=apl inline>_</syntaxhighlight> in NARS and <syntaxhighlight lang=apl inline>∆</syntaxhighlight> in Iverson's papers, is added to indicate [[recursion]]. Multiple expressions can be used by separating with <syntaxhighlight lang=apl inline>⋄</syntaxhighlight>. Various forms of control flow have been defined. | ||
In [[NARS]], operands are single strings, and one of them may be replaced with a [[Jot]] (using this operator as an operand as with [[Outer Product]]) to indicate an undefined case and create a strictly monadic or dyadic function. Conditions are indicated with colons <syntaxhighlight lang=apl inline>:</syntaxhighlight> as in direct definition notation, but the mechanism is extended: rather than a boolean condition placed between false and true cases, it's placed first, and returns a scalar or vector of natural numbers. Each number indicates one of the following groups of statements (separated by further <syntaxhighlight lang=apl inline>:</syntaxhighlight>s and numbered starting at 0), and these groups will then be evaluated, with the result of the last evaluated expression returned from the function as a whole. | |||
== | == Documentation == | ||
* [https://www.sudleyplace.com/APL/Nested%20Arrays%20System.pdf#page=58 | * [https://www.sudleyplace.com/APL/Nested%20Arrays%20System.pdf#page=58 NARS] | ||
== References == | |||
<references/> | |||
{{APL built-ins}}[[Category:Primitive operators]][[Category:Defining functions]] | {{APL built-ins}}[[Category:Primitive operators]][[Category:Defining functions]] |