Atop (operator)

From APL Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

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.