# Indexing

 Z←R[L],    R[L]←A,    and    R[L]f←A are all extended to allow both Reach and Scatter indexing.
L is a nested array of integer scalars and/or vectors, suitable for indexing R.
R is an arbitrary array.
A is an arbitrary array.
f is an arbitrary function.
 Reach Indexing: If L⊃R is valid, it is equivalent to ⊃R[⊂L], and if L⊃¨⊂R is valid, it is equivalent to R[L] Scatter Indexing: If L⌷R is valid, it is equivalent to R[⊃∘.,/L], and if L⌷¨⊂R is valid, it is equivalent to ⊂¨R[⊂¨L]
Both Reach and Scatter indexing may appear together within a single instance of R[L],    R[L]←A,    and    R[L]f←A
These functions are sensitive to ⎕IO.

For example, in origin-1

```      V←'123'(⊂4 5)
V[1 (2 ⍬ 1)]
123 4
M←2 2⍴(10 20) (30 40 'abc') 50 60
M[(1 1)((1 2) 3)]
10 20  abc```
 Z←R[L],    R[L]←A,    R[L]f←A,    L⌷[X] R,    L⍉R,    and    L⊃R are all extended to allow negative values in L.
For all but transpose, L is a nested array of integer scalars and/or vectors, suitable for indexing R; for transpose, L is an integer scalar or vector of integers, suitable for transposing R.
That is, if the largest allowed value for L is N, then the previous allowable range of values was ⎕IO to N, inclusive. Now, the allowable range of values is 1 ¯1[1]-N to N, inclusive. For example,    A,    A[⍳⍴A],    A[⍳-⍴A],    and even    A[⍳¯1 1[?(⍴⍴A)⍴2]×⍴A]    are all identical for any array A in either origin.
Also,    A,    (⍳⍴⍴A)⍉A,    and    (⍳-⍴⍴A)⍉A    are all identical for any array A in either origin.
R is an arbitrary array.
A is an arbitrary array.
These functions are sensitive to ⎕IO. Negative indexing is available only when the first element of ⎕FEATURE is set to 1.

For example, in origin-1

```      ⎕FEATURE[1]←1
V←'123'(⊂4 5)
V[¯1 (0 ⍬ ¯1)]
123 4```