# Index Generator

 Z←⍳R returns a vector of consecutive ascending integers.
R is a negative integer scalar or one-element vector.
Z is an integer vector of length |R whose values range from ⎕IO+R to ⎕IO-1.
This feature extends monadic iota to negative arguments.
This function is sensitive to ⎕IO and ⎕FEATURE. In particular, ⎕FEATURE[⎕IO] must be 1 in order for negative values in R to be accepted; otherwise a DOMAIN ERROR is signalled.

For example, in origin-0

⍳3
0 1 2

⍳¯3
¯3 ¯2 ¯1

and in origin-1

⍳3
1 2 3

⍳¯3
¯2 ¯1 0

This function is used to create Arithmetic Progression Arrays (APAs). For example, 2 3 4⍴⍳24 has a very compact storage consisting of the array shape (2 3 4), the starting offset (⎕IO) and multiplier (1), plus the normal array overhead (which includes the number of elements (24)).

 Z←⍳R returns an array of integer indices suitable for indexing all the elements of an array of shape |R.
R is an integer vector of length > 1.
Z is a nested array of shape |R whose items are each integer vectors of length ⍴⍴R and whose values range from ⎕IO+R to (⍴R)⍴⎕IO-1.
This feature extends monadic iota to multi-element vector arguments.
This function is sensitive to ⎕IO and ⎕FEATURE. In particular, ⎕FEATURE[⎕IO] must be 1 in order for negative values in R to be accepted; otherwise a DOMAIN ERROR is signalled.

For example, in origin-0

⍳2 3
0 0  0 1  0 2
1 0  1 1  1 2

⍳2 ¯3
0 ¯3  0 ¯2  0 ¯1
1 ¯3  1 ¯2  1 ¯1

and in origin-1

⍳2 3
1 1  1 2  1 3
2 1  2 2  2 3

⍳2 ¯3
1 ¯2  1 ¯1  1 0
2 ¯2  2 ¯1  2 0

For example, taking into account both of the above extensions, A, A[⍳⍴A], A[⍳-⍴A], and even A[⍳¯1 1[?(⍴⍴A)⍴2]×⍴A] are all identical for any array A in either origin.

This last extension is implemented via an internal magic function due to Carl M. Cheney:

∇ Z←#MonIota V
[1]   Z←⊃∘.,/⍳¨V
∇