4,577
edits
m (Text replacement - "<source" to "<syntaxhighlight") |
m (Text replacement - "</source>" to "</syntaxhighlight>") |
||
Line 1: | Line 1: | ||
:''This page is about lookups. See [[Indexing]], [[Indices]], [[Index Generator]], and [[Interval Index]] for other operations named after indices.'' | :''This page is about lookups. See [[Indexing]], [[Indices]], [[Index Generator]], and [[Interval Index]] for other operations named after indices.'' | ||
{{Built-in|Index Of|⍳}} is a [[dyadic]] [[primitive function]] which returns an array of [[index|indices]] where each item in the right [[argument]] appears in the left argument. If some item is not found, the corresponding index returned is one higher than the last index of the left argument. Index Of shares its [[glyph]] <syntaxhighlight lang=apl inline>⍳</ | {{Built-in|Index Of|⍳}} is a [[dyadic]] [[primitive function]] which returns an array of [[index|indices]] where each item in the right [[argument]] appears in the left argument. If some item is not found, the corresponding index returned is one higher than the last index of the left argument. Index Of shares its [[glyph]] <syntaxhighlight lang=apl inline>⍳</syntaxhighlight> with the monadic primitive function [[Index Generator]]. | ||
== Examples == | == Examples == | ||
Line 23: | Line 23: | ||
2 3 4 5 | 2 3 4 5 | ||
1 2 3 4 | 1 2 3 4 | ||
</ | </syntaxhighlight> | ||
Both arguments can be [[nested array|nested arrays]]. Each item of the right argument is compared to that of the left argument via [[match|exact match]]. | Both arguments can be [[nested array|nested arrays]]. Each item of the right argument is compared to that of the left argument via [[match|exact match]]. | ||
Line 30: | Line 30: | ||
'CAT' 'DOG' 'MOUSE'⍳'DOG' 'BIRD' | 'CAT' 'DOG' 'MOUSE'⍳'DOG' 'BIRD' | ||
2 4 | 2 4 | ||
</ | </syntaxhighlight> | ||
The behavior on "not found" is useful for selection with fallback (analogous to the [[wikipedia:switch statement|switch statement]] with a default branch in C-like languages). To achieve this, one can use <syntaxhighlight lang=apl inline>Z[X⍳Y]</ | The behavior on "not found" is useful for selection with fallback (analogous to the [[wikipedia:switch statement|switch statement]] with a default branch in C-like languages). To achieve this, one can use <syntaxhighlight lang=apl inline>Z[X⍳Y]</syntaxhighlight>, where <syntaxhighlight lang=apl inline>Z</syntaxhighlight> is one item longer than <syntaxhighlight lang=apl inline>X</syntaxhighlight>. The last item of <syntaxhighlight lang=apl inline>Z</syntaxhighlight> corresponds to the fallback item. In the example below, L and R are mapped to the values -1 and 1, while anything else is garbage and mapped to the fallback value of 0. | ||
<syntaxhighlight lang=apl> | <syntaxhighlight lang=apl> | ||
¯1 1 0['LR'⍳'LLL?!RR*LRzL'] | ¯1 1 0['LR'⍳'LLL?!RR*LRzL'] | ||
¯1 ¯1 ¯1 0 0 1 1 0 ¯1 1 0 ¯1 | ¯1 ¯1 ¯1 0 0 1 1 0 ¯1 1 0 ¯1 | ||
</ | </syntaxhighlight> | ||
== Properties == | == Properties == | ||
Line 45: | Line 45: | ||
== Extensions for higher-[[rank]] left argument == | == Extensions for higher-[[rank]] left argument == | ||
[[Dyalog APL]] (since 14.0) and [[J]] follows the [[leading axis theory]], and compares the [[major cell|major cells]] of X with [[cells]] of Y with the same rank. The resulting shape is <syntaxhighlight lang=apl inline>(1-≢⍴X)↓⍴Y</ | [[Dyalog APL]] (since 14.0) and [[J]] follows the [[leading axis theory]], and compares the [[major cell|major cells]] of X with [[cells]] of Y with the same rank. The resulting shape is <syntaxhighlight lang=apl inline>(1-≢⍴X)↓⍴Y</syntaxhighlight>. Dyalog APL requires that the shapes of the cells to be compared be equal <syntaxhighlight lang=apl inline>(1↓⍴X)≡(1-≢⍴X)↑⍴Y</syntaxhighlight>; otherwise [[LENGTH ERROR]] is raised. J simply treats them as not found. | ||
[[NARS2000]] simply compares items of X to the items of Y, and returns the nested array of shape of Y where each item indicates a multi-dimensional index in X. The index for not found items is <syntaxhighlight lang=apl inline>⎕IO+⍴X</ | [[NARS2000]] simply compares items of X to the items of Y, and returns the nested array of shape of Y where each item indicates a multi-dimensional index in X. The index for not found items is <syntaxhighlight lang=apl inline>⎕IO+⍴X</syntaxhighlight>. This also works with [[scalar]] X, though the result (an array filled with empty vectors) is not very meaningful. | ||
[[GNU APL]] follows the convention of NARS2000, with the exception that the index for not found items is an [[empty]] [[vector]] (!) instead of <syntaxhighlight lang=apl inline>⎕IO+⍴X</ | [[GNU APL]] follows the convention of NARS2000, with the exception that the index for not found items is an [[empty]] [[vector]] (!) instead of <syntaxhighlight lang=apl inline>⎕IO+⍴X</syntaxhighlight>. | ||
== External links == | == External links == |