Atop (operator): Difference between revisions

From APL Wiki
Jump to navigation Jump to search
(History)
m (Text replacement - "</source>" to "</syntaxhighlight>")
(3 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:
{|
{|
|<source lang=apl>  (g ⍤ h) ⍵</source>|| {{←→}} ||<source lang=apl>g (h ⍵)</source>
|<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:
{|
{|
|<source lang=apl>⍺ (g ⍤ h) ⍵</source>|| {{←→}} ||<source lang=apl>g ⍺ h ⍵)</source>
|<syntaxhighlight lang=apl>⍺ (g ⍤ h) ⍵</syntaxhighlight>|| {{←→}} ||<syntaxhighlight lang=apl>g (⍺ h ⍵)</syntaxhighlight>
|}
|}


== Examples ==
== Examples ==
<source lang=apl>
<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
</source>
</syntaxhighlight>


== Close composition ==
== Close composition ==


In [[SHARP APL]] and [[J]], Atop is implemented as a [[close composition]], meaning that (using SHARP syntax) <source lang=apl inline>f⍥g</source> has the overall [[function rank]] of <source lang=apl inline>g</source>. J uses <code>@</code> for the close form and <code>@:</code> for the rankless form that appears in modern APLs.
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 ==
== History ==


Atop was defined as subordinate to [[Over]] in [[Ken Iverson]]'s 1978 paper [[Operators and Functions]]: that is, the derived function <source lang=apl inline>f¨g</source> works as an Atop if <source lang=apl inline>f</source> is strictly monadic or (in the dyadic case) <source lang=apl inline>g</source> 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 <source lang=apl inline>⍥</source> 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 <source lang=apl inline>⍤</source> was chosen for [[Dyalog APL 18.0]], shared with the [[Rank operator]].
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. He called it Composition, as there was no [[Atop operator]]. 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 36: 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]]

Revision as of 21:53, 10 September 2022

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. 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.

External links

Lessons

Documentation

APL built-ins [edit]
Primitives (Timeline) Functions
Scalar
Monadic ConjugateNegateSignumReciprocalMagnitudeExponentialNatural LogarithmFloorCeilingFactorialNotPi TimesRollTypeImaginarySquare Root
Dyadic AddSubtractTimesDivideResiduePowerLogarithmMinimumMaximumBinomialComparison functionsBoolean functions (And, Or, Nand, Nor) ∙ GCDLCMCircularComplexRoot
Non-Scalar
Structural ShapeReshapeTallyDepthRavelEnlistTableCatenateReverseRotateTransposeRazeMixSplitEncloseNestCut (K)PairLinkPartitioned EnclosePartition
Selection FirstPickTakeDropUniqueIdentityStopSelectReplicateExpandSet functions (IntersectionUnionWithout) ∙ Bracket indexingIndexCartesian ProductSort
Selector Index generatorGradeIndex OfInterval IndexIndicesDealPrefix and suffix vectors
Computational MatchNot MatchMembershipFindNub SieveEncodeDecodeMatrix InverseMatrix DivideFormatExecuteMaterialiseRange
Operators Monadic EachCommuteConstantReplicateExpandReduceWindowed ReduceScanOuter ProductKeyI-BeamSpawnFunction axis
Dyadic BindCompositions (Compose, Reverse Compose, Beside, Withe, Atop, Over) ∙ Inner ProductDeterminantPowerAtUnderRankDepthVariantStencilCutDirect definition (operator)
Quad names Index originComparison toleranceMigration levelAtomic vector
  1. "Composition and Enclosure". SATN-41, 1981-06-20.
  2. "Language Extensions of May 1983". SATN-45, 1983-05-02.