Atop (operator)

 `⍤`

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) ⍵ ``` ${\displaystyle \Leftrightarrow }$ ```g (h ⍵) ```

When the resulting function is used dyadically, the result is post-processed:

 ```⍺ (g ⍤ h) ⍵ ``` ${\displaystyle \Leftrightarrow }$ ```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. 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[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.