Equal to: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
m (Text replacement - "<source" to "<syntaxhighlight")
Line 1: Line 1:
{{Built-in|Equal to|<nowiki>=</nowiki>}} is a [[comparison function]] which tests whether argument elements are [[Tolerant comparison|tolerantly]] equal to each other: it returns 1 if the [[element]]s being compared [[match]] and 0 if they do not. It is the [[Not|negation]] of [[Not Equal to]] (<source lang=apl inline>≠</source>).
{{Built-in|Equal to|<nowiki>=</nowiki>}} is a [[comparison function]] which tests whether argument elements are [[Tolerant comparison|tolerantly]] equal to each other: it returns 1 if the [[element]]s being compared [[match]] and 0 if they do not. It is the [[Not|negation]] of [[Not Equal to]] (<syntaxhighlight lang=apl inline>≠</source>).


APL's <source lang=apl inline>=</source> differs from the usage of <math>=</math> in [[Comparison with traditional mathematics|traditional mathematical notation]] by having an implied [[Ken_Iverson#Iverson_bracket|Iverson bracket]]. Thus, <source lang=apl inline>i=j</source> is APL is equivalent to <math>[i=j]</math> or <math>\delta_{ij}</math> ([[wikipedia:Kronecker delta|Kronecker delta]]) in mathematics.
APL's <syntaxhighlight lang=apl inline>=</source> differs from the usage of <math>=</math> in [[Comparison with traditional mathematics|traditional mathematical notation]] by having an implied [[Ken_Iverson#Iverson_bracket|Iverson bracket]]. Thus, <syntaxhighlight lang=apl inline>i=j</source> is APL is equivalent to <math>[i=j]</math> or <math>\delta_{ij}</math> ([[wikipedia:Kronecker delta|Kronecker delta]]) in mathematics.


== Examples ==
== Examples ==


Equal to compares arrays one [[element]] at a time, returning 1 when elements match and 0 when they do not.
Equal to compares arrays one [[element]] at a time, returning 1 when elements match and 0 when they do not.
<source lang=apl>
<syntaxhighlight lang=apl>
       3 2 1 = 1 2 3
       3 2 1 = 1 2 3
0 1 0
0 1 0
Line 15: Line 15:
</source>
</source>
It is subject to [[comparison tolerance]]: floating-point numbers which are very close together are considered equal, even though they are slightly different:
It is subject to [[comparison tolerance]]: floating-point numbers which are very close together are considered equal, even though they are slightly different:
<source lang=apl>
<syntaxhighlight lang=apl>
       ⎕CT
       ⎕CT
1E¯14
1E¯14
Line 27: Line 27:
</source>
</source>
In a [[Nested array model|nested]] APL, Equal to is pervasive, and compares all [[simple scalar]]s found in a [[nested array]].
In a [[Nested array model|nested]] APL, Equal to is pervasive, and compares all [[simple scalar]]s found in a [[nested array]].
<source lang=apl>
<syntaxhighlight lang=apl>
       ⎕←n ← ((2 1)0)(1 0 3)(2 2⍴4 0)
       ⎕←n ← ((2 1)0)(1 0 3)(2 2⍴4 0)
┌───────┬─────┬───┐
┌───────┬─────┬───┐
Line 42: Line 42:
</source>
</source>
In a [[Flat array model|flat]] array language such as [[J]], it instead compares [[Box]]es directly, since they are the [[element]]s of a boxed array.
In a [[Flat array model|flat]] array language such as [[J]], it instead compares [[Box]]es directly, since they are the [[element]]s of a boxed array.
<source lang=j>
<syntaxhighlight lang=j>
   (<'string') = 'which';'is';'string';'?'
   (<'string') = 'which';'is';'string';'?'
0 0 1 0
0 0 1 0
Line 51: Line 51:
When the arguments to Equal to are [[Boolean]], it is the [[wikipedia:Logical biconditional|Logical biconditional]] function, or the [[Not|negation]] of the [[xor]] function (which is [[Not Equal to]] restricted to Boolean arguments):
When the arguments to Equal to are [[Boolean]], it is the [[wikipedia:Logical biconditional|Logical biconditional]] function, or the [[Not|negation]] of the [[xor]] function (which is [[Not Equal to]] restricted to Boolean arguments):
{|class=wikitable
{|class=wikitable
!<source lang=apl inline>=</source>!!<source lang=apl inline>0</source>!!<source lang=apl inline>1</source>
!<syntaxhighlight lang=apl inline>=</source>!!<syntaxhighlight lang=apl inline>0</source>!!<syntaxhighlight lang=apl inline>1</source>
|-
|-
!<source lang=apl inline>0</source>
!<syntaxhighlight lang=apl inline>0</source>
|<source lang=apl inline>1</source>||<source lang=apl inline>0</source>
|<syntaxhighlight lang=apl inline>1</source>||<syntaxhighlight lang=apl inline>0</source>
|-
|-
!<source lang=apl inline>1</source>
!<syntaxhighlight lang=apl inline>1</source>
|<source lang=apl inline>0</source>||<source lang=apl inline>1</source>
|<syntaxhighlight lang=apl inline>0</source>||<syntaxhighlight lang=apl inline>1</source>
|}
|}
In the context of logic, it can be read as ''if and only if''. This function is also known as xnor or the Kronecker delta.
In the context of logic, it can be read as ''if and only if''. This function is also known as xnor or the Kronecker delta.


[[Reduction]] with <source lang=apl inline>=</source> is the same as reduction with xor (<source lang=apl inline>≠</source>), but [[Not|inverted]] if the number of reduced elements is even. The left and right [[identity element]] for Boolean <source lang=apl inline>=</source> is 1.
[[Reduction]] with <syntaxhighlight lang=apl inline>=</source> is the same as reduction with xor (<syntaxhighlight lang=apl inline>≠</source>), but [[Not|inverted]] if the number of reduced elements is even. The left and right [[identity element]] for Boolean <syntaxhighlight lang=apl inline>=</source> is 1.


== External links ==
== External links ==

Revision as of 22:14, 10 September 2022

=

Equal to (=) is a comparison function which tests whether argument elements are tolerantly equal to each other: it returns 1 if the elements being compared match and 0 if they do not. It is the negation of Not Equal to (<syntaxhighlight lang=apl inline>≠</source>).

APL's <syntaxhighlight lang=apl inline>=</source> differs from the usage of in traditional mathematical notation by having an implied Iverson bracket. Thus, <syntaxhighlight lang=apl inline>i=j</source> is APL is equivalent to or (Kronecker delta) in mathematics.

Examples

Equal to compares arrays one element at a time, returning 1 when elements match and 0 when they do not. <syntaxhighlight lang=apl>

     3 2 1 = 1 2 3

0 1 0

     '321' = '123'

0 1 0

     3j2 2j2 1j2 = 2j2

0 1 0 </source> It is subject to comparison tolerance: floating-point numbers which are very close together are considered equal, even though they are slightly different: <syntaxhighlight lang=apl>

     ⎕CT

1E¯14

     x ← 1 + (⎕CT×0.6)ׯ2 ¯1 0 1 2     ⍝ Numbers close to 1
     1 - x                             ⍝ Nonzero difference

1.199040867E¯14 5.995204333E¯15 0 ¯5.995204333E¯15 ¯1.199040867E¯14

     1 = x                             ⍝ Close but different values are equal

0 1 1 1 0

     1 {⎕CT←0⋄⍺=⍵} x                   ⍝ Overriding ⎕CT within a dfn

0 0 1 0 0 </source> In a nested APL, Equal to is pervasive, and compares all simple scalars found in a nested array. <syntaxhighlight lang=apl>

     ⎕←n ← ((2 1)0)(1 0 3)(2 2⍴4 0)

┌───────┬─────┬───┐ │┌───┬─┐│1 0 3│4 0│ ││2 1│0││ │4 0│ │└───┴─┘│ │ │ └───────┴─────┴───┘

     0 = n

┌───────┬─────┬───┐ │┌───┬─┐│0 1 0│0 1│ ││0 0│1││ │0 1│ │└───┴─┘│ │ │ └───────┴─────┴───┘ </source> In a flat array language such as J, it instead compares Boxes directly, since they are the elements of a boxed array. <syntaxhighlight lang=j>

  (<'string') = 'which';'is';'string';'?'

0 0 1 0 </source>

Boolean function

Main article: Boolean function

When the arguments to Equal to are Boolean, it is the Logical biconditional function, or the negation of the xor function (which is Not Equal to restricted to Boolean arguments):

<syntaxhighlight lang=apl inline>=</source> <syntaxhighlight lang=apl inline>0</source> <syntaxhighlight lang=apl inline>1</source>
<syntaxhighlight lang=apl inline>0</source> <syntaxhighlight lang=apl inline>1</source> <syntaxhighlight lang=apl inline>0</source>
<syntaxhighlight lang=apl inline>1</source> <syntaxhighlight lang=apl inline>0</source> <syntaxhighlight lang=apl inline>1</source>

In the context of logic, it can be read as if and only if. This function is also known as xnor or the Kronecker delta.

Reduction with <syntaxhighlight lang=apl inline>=</source> is the same as reduction with xor (<syntaxhighlight lang=apl inline>≠</source>), but inverted if the number of reduced elements is even. The left and right identity element for Boolean <syntaxhighlight lang=apl inline>=</source> is 1.

External links

Documentation

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