Pair: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
(More explicit description of the monadic case)
(Rearrange; include name "Half Pair")
Line 1: Line 1:
{{Built-in|Pair|⍮}} or '''Juxtapose''' is a [[primitive]] [[ambivalent function]] that constructs a [[vector]] of its [[argument]]s. It can be implemented as the [[dfn]] <syntaxhighlight lang=apl inline>{⍺←,⊂ ⋄ ⍺ ⍵}</syntaxhighlight>, or the [[catenate|catenation]] of the [[enclose]]d arguments, written <syntaxhighlight lang=apl inline>,⍥⊂</syntaxhighlight> using [[Over]].<ref>[https://www.jsoftware.com/papers/satn41.htm "Composition and Enclosure"] § Composition Operators. SATN-41, 1981-06-20.</ref> Pair aids in constructing nested arrays in [[tacit programming]], where [[stranding]] by juxtaposition is not available. It was introduced in [[Extended Dyalog APL]] in 2018, and then adopted into [[dzaima/APL]]. It was added to [[BQN]] with the glyph <code>⋈</code> in 2021. The [[monadic]] case, which is similar to [[Enclose]] except that it gives a result of [[rank]] 1 rather than 0, is called '''Enlist''' in BQN, as well as [[K]], where it is the monadic case of <code>,</code> (K has no dyadic Pair primitive).
{{Built-in|Pair|⍮}} or '''Juxtapose''' is a [[primitive]] [[ambivalent function]] that constructs a [[vector]] of its [[argument]]s, present in [[Extended Dyalog APL]], [[dzaima/APL]], and [[BQN]] (as <code>⋈</code>). The [[monadic]] case is referred to as '''Half Pair''' in Extended Dyalog APL, and is similar to [[Enclose]] except that it gives a result of [[rank]] 1 rather than 0. This case is called '''Enlist''' in BQN, as well as [[K]], where it is the monadic case of <code>,</code> (K has no dyadic Pair primitive). Dyadic Pair is similar to the [[Link]] primitive in [[SHARP APL]] and [[J]], but Link has an asymmetric definition that adds its left argument to a vector right argument rather than creating a new vector.
 
Pair can be implemented as the [[dfn]] <syntaxhighlight lang=apl inline>{⍺←,⊂ ⋄ ⍺ ⍵}</syntaxhighlight>, or the [[catenate|catenation]] of the [[enclose]]d arguments, written <syntaxhighlight lang=apl inline>,⍥⊂</syntaxhighlight> using [[Over]].<ref>[https://www.jsoftware.com/papers/satn41.htm "Composition and Enclosure"] § Composition Operators. SATN-41, 1981-06-20.</ref> Pair aids in constructing nested arrays in [[tacit programming]], where [[stranding]] by juxtaposition is not available.


== Common usage ==
== Common usage ==
Line 23: Line 25:
{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]]}}
{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]]}}


== External links ==
== History ==


=== Documentation ===
Pair was defined as <syntaxhighlight lang=apl inline>⍮</syntaxhighlight> in [[Extended Dyalog APL]] in 2018, and then adopted into [[dzaima/APL]]. It was added to [[BQN]] with the glyph <code>⋈</code> in 2021.
 
== Documentation ==


* [https://mlochbaum.github.io/BQN/doc/pair.html BQN] (as <code>⋈</code>)
* [https://mlochbaum.github.io/BQN/doc/pair.html BQN] (as <code>⋈</code>)
== See also ==
* [[Link]]


== References ==
== References ==
<references />
<references />
{{APL built-ins}}[[Category:Primitive functions]]
{{APL built-ins}}[[Category:Primitive functions]]

Revision as of 16:32, 6 March 2024

Pair () or Juxtapose is a primitive ambivalent function that constructs a vector of its arguments, present in Extended Dyalog APL, dzaima/APL, and BQN (as ). The monadic case is referred to as Half Pair in Extended Dyalog APL, and is similar to Enclose except that it gives a result of rank 1 rather than 0. This case is called Enlist in BQN, as well as K, where it is the monadic case of , (K has no dyadic Pair primitive). Dyadic Pair is similar to the Link primitive in SHARP APL and J, but Link has an asymmetric definition that adds its left argument to a vector right argument rather than creating a new vector.

Pair can be implemented as the dfn {⍺←,⊂ ⋄ ⍺ ⍵}, or the catenation of the enclosed arguments, written ,⍥⊂ using Over.[1] Pair aids in constructing nested arrays in tacit programming, where stranding by juxtaposition is not available.

Common usage

Its plain usage is in pairing up two parallel values:

Try it online!

      6 7 8(+⍮-)3
┌───────┬─────┐
│9 10 11│3 4 5│
└───────┴─────┘

It can also be combined with Mix to increase rank rather than depth:

Try it online!

      6 7 8(+↑⍤⍮-)3
9 10 11
3  4  5

History

Pair was defined as in Extended Dyalog APL in 2018, and then adopted into dzaima/APL. It was added to BQN with the glyph in 2021.

Documentation

References

  1. "Composition and Enclosure" § Composition Operators. SATN-41, 1981-06-20.
APL built-ins [edit]
Primitives (Timeline) Functions
Scalar
Monadic ConjugateNegateSignumReciprocalMagnitudeExponentialNatural LogarithmFloorCeilingFactorialNotPi TimesRollTypeImaginarySquare RootRound
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 axisIdentity (Null, Ident)
Dyadic BindCompositions (Compose, Reverse Compose, Beside, Withe, Atop, Over) ∙ Inner ProductDeterminantPowerAtUnderRankDepthVariantStencilCutDirect definition (operator)Identity (Lev, Dex)
Quad names Index originComparison toleranceMigration levelAtomic vector