rslt ← {array} ##.iotag array ⍝ Generalized iota.
Supplied by Steve Mansour:
Monadic form produces generalized Index Generator function.
Dyadic form with simple scalar left argument produces interval function.
Dyadic form with rank 1 or higher left argument produces generalized Index Of
function.
The following table describes the function in detail:
┌──────────────────┬──────────────────┬────────────────────────────────────────┐
│ Left Argument │ Right Argument │ Function/Result │
├──────────────────┼──────────────────┼────────────────────────────────────────┤
│ │ Scalar integer │ Index Generator: iotag ⍵ ←→ (×⍵)×⍳|⍵│
│ │ ⎕IO←0, ⍵≥0 │ 0 1 2 ... ⍵-1 │
│ │ ⎕IO←0, ⍵<0 │ 0 ¯1 ¯2 ... ⍵+1 │
│ None (monadic) │ ⎕IO←1, ⍵≥0 │ 1 2 3 ... ⍵ │
│ │ ⎕IO←1, ⍵<0 │ ¯1 ¯2 ¯3 ... ⍵ │
│ ├──────────────────┼────────────────────────────────────────┤
│ │ Character scalar │ Alphabetic Index (⎕IO independent) │
│ │ ⍵∊'ABC...Z' │ 'ABC...⍵' iotag 'Z' ←→ ⎕A │
│ │ ⍵∊'abc...z' │ 'abc...⍵' iotag 'd' ←→ 'abcd' │
│ │ ⍵∊'012345789' │ '012...⍵' iotag '9' ←→ ⎕D │
│ │ ⍵=' ' │ '' │
├──────────────────┼──────────────────┼────────────────────────────────────────┤
│ Scalar Integer │ Scalar integer │ Interval (⎕IO independent) │
│ (0=⍴⍴⍺) │ ⍺≤⍵ │ ⍺ (⍺+1) (⍺+2) ... ⍵ │
│ │ ⍺>⍵ │ ⍺ (⍺-1) (⍺-2) ... ⍵ │
│ ├──────────────────┼────────────────────────────────────────┤
│ │ 2-Item vector │ Step Interval (⎕IO independent) │
│ │ (z s)←⍵ │ Endpoint, [Stepsize] │
│ │ ⍺≤z │ ⍺ (⍺+s) (⍺+s×2) ... (z⌊⍺+s×n) │
│ │ ⍺>z │ ⍺ (⍺-s) (⍺-s×2) ... (z⌈⍺-s×n) │
├──────────────────┼──────────────────┼────────────────────────────────────────┤
│ Character scalar │ Character scalar │ Character Interval (⎕IO independent) │
│ (0=⍴⍴⍺) │ │ ⍺ iotag ⍵ ←→ ⎕AV[↑iotag/⎕AV⍳⍺ ⍵] │
│ │ │ 'B' iotag 'F' ←→ 'BCDEF' │
│ │ │ 'z' iotag 'w' ←→ 'zyxw' │
├──────────────────┼──────────────────┼────────────────────────────────────────┤
│ Vector (1=⍴⍴⍺) │ Any array │ Index of (traditional dyadic ⍳) │
├──────────────────┼──────────────────┼────────────────────────────────────────┤
│ Matrix (2=⍴⍴⍺) │ Vector │ Generalized Index of │
│ │ (1=⍴⍴⍵) │ Index of row (ignore trailing blanks) │
│ ├──────────────────┼────────────────────────────────────────┤
│ │ Matrix (2=⍴⍴⍵) │ Index of each row │
│ ├──────────────────┼────────────────────────────────────────┤
│ │ Array (3≤⍴⍴⍵) │ Index of each row │
├──────────────────┼──────────────────┼────────────────────────────────────────┤
│ Array (3≤⍴⍴⍺) │ Matrix (2=⍴⍴⍵) │ Index of (hyper)plane │
│ ├──────────────────┼────────────────────────────────────────┤
│ │ Array (3≤⍴⍴⍵) │ Index of each (hyper)plane │
└──────────────────┴──────────────────┴────────────────────────────────────────┘
Note that inner function "ischar" accepts Unicode characters from Dyalog 11.1.
Examples:
Beatles APLers Names
┌──────┬─────┬──────┐
│JOHN │STEVE│PAUL │
│PAUL │PAUL │STEVE │
│GEORGE│JOHN │BILL │
│RINGO │PETE │GEORGE│
└──────┴─────┴──────┘
APLers iotag 'STEVE' ⍝ Find row of matrix
0
⍴APLers iotag 1 5⍴'STEVE' ⍝ One-row matrix results in 1-item vector result
1
Beatles iotag 'GEORGE ' ⍝ Ignores trailing blanks (and trailing 0's)
2
APLers iotag Beatles ⍝ Find multiple rows of matrix
2 1 4 4
⍴Rank3←⊃APLers Beatles ⍝ Rank 3 array
2 4 6
Rank3 iotag Beatles ⍝ Find matrix in Rank-3 array
1
Beatles iotag Rank3 ⍝ Find Vectors in matrix
4 1 0 4
0 1 2 3
3 iotag 5 .5 ⍝ Step of 0.5
3 3.5 4 4.5 5
12 iotag 3 3 ⍝ Step of 3
12 9 6 3
Back to: contents
Back to: Workspaces