Difference between revisions of "Match"

From APL Wiki
Jump to navigation Jump to search
Line 55: Line 55:
{{Works in|[[Dyalog APL 18.0]]}}
{{Works in|[[Dyalog APL 18.0]]}}
== See also ==
* [[Not Match]]
== History ==
== History ==
Match was introduced by [[NARS]] with the name "Equivalent"; both [[Dyalog APL]] and [[APL2]] included it with the name "Match", which has generally been used in later APLs.
Match was introduced by [[NARS]] with the name "Equivalent"; both [[Dyalog APL]] and [[APL2]] included it with the name "Match", which has generally been used in later APLs.
== External links ==
=== Documentation ===
* [http://help.dyalog.com/latest/#Language/Primitive%20Functions/Match.htm Dyalog]
* [http://microapl.com/apl_help/ch_020_020_360.htm APLX]
{{APL built-ins}}[[Category:Primitive functions]]
{{APL built-ins}}[[Category:Primitive functions]]

Revision as of 10:16, 9 July 2020

Match () is a dyadic primitive function which indicates whether the left and right argument arrays are identical, taking into account comparison tolerance and possibly ignoring prototypes. The result of Match is always a Boolean scalar: it is 1 if the arrays match and 0 otherwise. Two arrays match if they have the same shape and their corresponding elements and possibly prototypes match—in flat array theory, the elements should be tolerantly equal to each other; in nested array theory, the definition is recursive with the base case of simple scalars, which also match if they are tolerantly equal.


Match can be used to compare simple vectors to see if they are the same:

      1 2 3  1 2 3
      1 2 3  1 2 5

Using strand notation to create nested arrays, we see that Match also compares elements nested within arrays:

      (1 2)3  (2 1)3

Arrays with the same elements but different shapes do not match. Unlike Equal to, Match never gives a RANK ERROR or LENGTH ERROR because of argument shapes.

      (3 2⍴⍳6)  (2 3⍴⍳6)
      'a'  ,'a'  ⍝ Scalar versus singleton

Match depends on comparison tolerance. Here two arrays which are not exactly identical are still reported as matching:

      a⎕CT+b2 3 4  ⍝ Two vectors
      a - b  ⍝ Difference is not zero
1.021405183E¯14 1.021405183E¯14 9.769962617E¯15
      a  b  ⍝ They match tolerantly
      a {⎕CT0} b  ⍝ ...but not intolerantly


Arrays match if they are equal in all the characteristics defined by APL's array model:

The way elements are compared depends on the particular array model used. In flat array theory, elements match if they have the same type (such as numeric or character) and are tolerantly equal. If boxes are possible, then this definition is recursive, because boxes are defined to be equal when the arrays they contain match. In nested array theory, the definition is always recursive. As a base case, simple scalars are defined to match when they are tolerantly equal.

APL model

The following model implements Match in Dyalog APL. Because Match compares the same characteristic of both arguments, Over () is used throughout.

Match  {
  (≢⍴)⍵: 0     ⍝ Rank
  ~.=⍵: 0     ⍝ Shape
  0=⍵: =    ⍝ For simple scalars, use =
  0/⍵: ⍺∇   ⍝ Prototype for empty arrays
  .,         ⍝ Recurse
Works in: Dyalog APL 18.0

See also


Match was introduced by NARS with the name "Equivalent"; both Dyalog APL and APL2 included it with the name "Match", which has generally been used in later APLs.

External links


APL built-ins [edit]
Primitive functions
Monadic ConjugateNegateSignumReciprocalMagnitudeExponentialNatural LogarithmFloorCeilingFactorialNotPi TimesRollTypeImaginarySquare Root
Dyadic AddSubtractTimesDivideResiduePowerLogarithmMinimumMaximumBinomialComparison functionsBoolean functions (And, Or, Nand, Nor) ∙ GCDLCMCircularComplexRoot
Structural ShapeReshapeTallyDepthRavelEnlistTableCatenateReverseRotateTransposeRazeMixSplitEncloseNestCut (K)PairLinkPartitioned EnclosePartition
Selection FirstPickTakeDropUniqueIdentitySelectReplicateExpandSet functions (IntersectionUnionWithout) ∙ Bracket indexingIndex
Selector Index generatorGradeIndex OfInterval IndexIndicesDeal
Computational MatchNot MatchMembershipFindNub SieveEncodeDecodeMatrix InverseMatrix DivideFormatExecuteMaterialiseRange
Primitive operators Monadic EachCommuteConstantReplicateExpandReduceWindowed ReduceScanOuter ProductKeyI-beamSpawnFunction axis
Dyadic BindCompositions (Compose, Reverse Compose, Beside, Atop, Over) ∙ Inner ProductPowerAtUnderRankDepthVariantStencilCut (J)
Quad names
Arrays Index originMigration levelAtomic vector
Functions Name classCase convertUnicode convert
Operators SearchReplace