⍤) 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.
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 ⍵)
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
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.
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. He called it Composition, as there was no Atop operator. It was added to SHARP APL as a close composition with glyph
⍥ and name "upon" (initially "over"), with a limited implementation in 1981 followed by a full implementation in 1983 with the introduction of function rank. 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.
- J Dictionary, NuVoc
- ↑ "Composition and Enclosure". SATN-41, 1981-06-20.
- ↑ "Language Extensions of May 1983". SATN-45, 1983-05-02.