Atop (operator): Difference between revisions
(Close composition (SHARP/J) section) |
m (→History) |
||
(5 intermediate revisions by 3 users not shown) | |||
Line 4: | Line 4: | ||
When the resulting function is used [[monadic]]ally, it has the same behaviour as if the [[Atop]] 2-train or any of the [[Beside]] or [[Over]] operators had been used: | When the resulting function is used [[monadic]]ally, it has the same behaviour as if the [[Atop]] 2-train or any of the [[Beside]] or [[Over]] operators had been used: | ||
{| | {| | ||
|< | |<syntaxhighlight lang=apl> (g ⍤ h) ⍵</syntaxhighlight>|| {{←→}} ||<syntaxhighlight lang=apl>g (h ⍵)</syntaxhighlight> | ||
|} | |} | ||
When the resulting function is used [[dyadic]]ally, the result is post-processed: | When the resulting function is used [[dyadic]]ally, the result is post-processed: | ||
{| | {| | ||
|< | |<syntaxhighlight lang=apl>⍺ (g ⍤ h) ⍵</syntaxhighlight>|| {{←→}} ||<syntaxhighlight lang=apl>g (⍺ h ⍵)</syntaxhighlight> | ||
|} | |} | ||
== Examples == | == Examples == | ||
< | <syntaxhighlight lang=apl> | ||
x←3 1 2 | x←3 1 2 | ||
y←4 6 5 | y←4 6 5 | ||
Line 20: | Line 20: | ||
-x⌈y | -x⌈y | ||
¯4 ¯6 ¯5 | ¯4 ¯6 ¯5 | ||
</ | </syntaxhighlight> | ||
== Close composition == | == Close composition == | ||
In [[SHARP APL]] and [[J]], Atop is implemented as a [[close composition]], meaning that (using SHARP syntax) < | In [[SHARP APL]] and [[J]], Atop is implemented as a [[close composition]], meaning that (using SHARP syntax) <syntaxhighlight lang=apl inline>f⍥g</syntaxhighlight> has the overall [[function rank]] of <syntaxhighlight lang=apl inline>g</syntaxhighlight>. J uses <code>@</code> for the close form and <code>@:</code> for the rankless form that appears in modern APLs. | ||
== History == | |||
Atop was defined as subordinate to [[Over]] in [[Ken Iverson]]'s 1978 paper [[Operators and Functions]]: that is, the derived function <syntaxhighlight lang=apl inline>f¨g</syntaxhighlight> works as an Atop if <syntaxhighlight lang=apl inline>f</syntaxhighlight> is strictly monadic or (in the dyadic case) <syntaxhighlight lang=apl inline>g</syntaxhighlight> is strictly dyadic (the combined operator <syntaxhighlight lang=apl inline>¨</syntaxhighlight> was called Composition). It was added to [[SHARP APL]] as a [[close composition]] with glyph <syntaxhighlight lang=apl inline>⍥</syntaxhighlight> and name "upon" (initially "over"), with a limited implementation in 1981<ref>[https://www.jsoftware.com/papers/satn41.htm "Composition and Enclosure"]. SATN-41, 1981-06-20.</ref> followed by a full implementation in 1983 with the introduction of [[function rank]].<ref>[https://www.jsoftware.com/papers/satn45.htm "Language Extensions of May 1983"]. SATN-45, 1983-05-02.</ref> The name "Atop" was introduced by [[J]] (which uses "At" for its non-close form). The glyph <syntaxhighlight lang=apl inline>⍤</syntaxhighlight> was chosen for [[Dyalog APL 18.0]], shared with the [[Rank operator]]. | |||
== External links == | == External links == | ||
Line 32: | Line 36: | ||
* [https://help.dyalog.com/latest/#Language/Primitive%20Operators/Atop.htm Dyalog] | * [https://help.dyalog.com/latest/#Language/Primitive%20Operators/Atop.htm Dyalog] | ||
* J [https://www.jsoftware.com/help/dictionary/d632.htm Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/atco NuVoc] | * J [https://www.jsoftware.com/help/dictionary/d632.htm Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/atco NuVoc] | ||
* [https://mlochbaum.github.io/BQN/doc/compose.html BQN] | |||
{{APL built-ins}}[[Category:Primitive operators]][[Category:Composition operators]] | {{APL built-ins}}[[Category:Primitive operators]][[Category:Composition operators]] |
Latest revision as of 19:05, 16 March 2024
⍤
|
Atop (⍤
) is a primitive dyadic operator which takes two function operands and produces a derived function which uses the left operand monadically to post-processes the result of the ambivalent right operand.
Explanation
When the resulting function is used monadically, it has the same behaviour as if the Atop 2-train or any of the Beside or Over operators had been used:
(g ⍤ h) ⍵ |
g (h ⍵) |
When the resulting function is used dyadically, the result is post-processed:
⍺ (g ⍤ h) ⍵ |
g (⍺ h ⍵) |
Examples
x←3 1 2 y←4 6 5 x -⍤⌈ y ⍝ the negation of the max of x y ¯4 ¯6 ¯5 ⍝ same as -x⌈y ¯4 ¯6 ¯5
Close composition
In SHARP APL and J, Atop is implemented as a close composition, meaning that (using SHARP syntax) f⍥g
has the overall function rank of g
. J uses @
for the close form and @:
for the rankless form that appears in modern APLs.
History
Atop was defined as subordinate to Over in Ken Iverson's 1978 paper Operators and Functions: that is, the derived function f¨g
works as an Atop if f
is strictly monadic or (in the dyadic case) g
is strictly dyadic (the combined operator ¨
was called Composition). It was added to SHARP APL as a close composition with glyph ⍥
and name "upon" (initially "over"), with a limited implementation in 1981[1] followed by a full implementation in 1983 with the introduction of function rank.[2] The name "Atop" was introduced by J (which uses "At" for its non-close form). The glyph ⍤
was chosen for Dyalog APL 18.0, shared with the Rank operator.
External links
Lessons
Documentation
- Dyalog
- J Dictionary, NuVoc
- BQN
- ↑ "Composition and Enclosure". SATN-41, 1981-06-20.
- ↑ "Language Extensions of May 1983". SATN-45, 1983-05-02.