Indices

From NARS2000
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Z←⍸R returns a simple integer vector or nested vector of integer vectors identical to (,R)/,⍳⍴R.
R is a simple array of non-negative integers.
For vector R, Z is an integer vector. For all other ranks of R, Z is a nested vector of integer vectors. In both case the length of Z is +/,R.
For scalars or vectors, the result is equivalent to R/⍳⍴R which encapsulates a very common idiom in one symbol.
For higher rank arrays, the result extends to produce a nested vector of vectors of the indices of all the positive integer elements of R replicated as per the corresponding value in R.
This function is sensitive to ⎕IO.


For example, in origin-0

      ⍸,3
0 0 0
      ⍬⍬⍬≡⍸3 ⍝ for scalar S, ⍸S ←→ S⍴⊂⍬  as per the definition R/⍳⍴R
1
      ⍬≡⍸⍬
1
      ⍸1 0 1 1 1 0 1
0 2 3 4 6
      ⍸'Now is the time'=' '
3 6 10
      ⍸2 3 4
0 0 1 1 1 2 2 2 2
      ⍸⎕←2 3⍴⍳4
 0 1 2
 3 0 1
 0 1  0 2  0 2  1 0  1 0  1 0  1 2
      ⍸1 2 3⍴⍳4
 0 0 1  0 0 2  0 0 2  0 1 0  0 1 0  0 1 0  0 1 2

    ∇ Z←(Txt Rep) txtrep Z;a
[1]   ⍝ Replace Txt in Z with Rep.
[2]   :Assert 2=⍴⍴Z ⋄ :Assert (⍴Txt)≡⍴Rep
[3]   a←⍸Txt⍷Z
[4]   Z[⊃⊃¨,¨/¨a+⊂0(0..¯1+⍴Txt)]←((⍴a),⍴Rep)⍴Rep
    ∇
      'Now' 'Who' txtrep 4 13⍴'Now is the time...'
Who is the ti
me...Who is t
he time...Who
 is the time.