⍝ extended at:
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ right operand conformability
1 at{⍬⍴1 0}3 4 5⍴0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 at{3⍴1 0}3 4 5⍴0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 at{3 4⍴1 0}3 4 5⍴0
1 1 1 1 1
0 0 0 0 0
1 1 1 1 1
0 0 0 0 0
1 1 1 1 1
0 0 0 0 0
1 1 1 1 1
0 0 0 0 0
1 1 1 1 1
0 0 0 0 0
1 1 1 1 1
0 0 0 0 0
1 at{3 4 5⍴1 0}3 4 5⍴0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ left operand conformability
(⍬⍴⍳40)at{1 0 1}3 4 5⍴0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
(2⍴⍳40)at{1 0 1}3 4 5⍴0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
(2 4⍴⍳40)at{1 0 1}3 4 5⍴0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
5 5 5 5 5
6 6 6 6 6
7 7 7 7 7
8 8 8 8 8
(2 4 5⍴⍳40)at{1 0 1}3 4 5⍴0
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
21 22 23 24 25
26 27 28 29 30
31 32 33 34 35
36 37 38 39 40
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ left and right operand conformability
(⍳4) +⍤0 1 at{3 4⍴0 0 1}3 4 5⍴0 ⍝ left and right operand agreement
0 0 0 0 0
0 0 0 0 0
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
2 2 2 2 2
0 0 0 0 0
0 0 0 0 0
3 3 3 3 3
0 0 0 0 0
0 0 0 0 0
4 4 4 4 4
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ Special cases
(,'*')at{1 0}2 2⍴⎕A ⍝ _single_ extension
**
CD
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ Regular @ testing:
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ selection by index:
'*'at 2 4 ⊢5↑⎕A ⍝ * at 2nd and 4th items
A*C*E
M←5 5⍴⍳25
0 at 2 4 ⊢M ⍝ 0 at 2nd and 4th rows
1 2 3 4 5
0 0 0 0 0
11 12 13 14 15
0 0 0 0 0
21 22 23 24 25
(2 5⍴⎕a) at 2 4 ⊢M ⍝ A..J at 2nd and 4th rows
1 2 3 4 5
A B C D E
11 12 13 14 15
F G H I J
21 22 23 24 25
0 at 2 4⍤1 ⊢M ⍝ 0 at 2nd and 4th cols
1 0 3 0 5
6 0 8 0 10
11 0 13 0 15
16 0 18 0 20
21 0 23 0 25
(⍉2 5⍴⎕a)⊣at 2 4⍤1 ⊢M ⍝ A..J at 2nd and 4th cols
1 A 3 F 5
6 B 8 G 10
11 C 13 H 15
16 D 18 I 20
21 E 23 J 25
⌽ at 2 4 ⊢M ⍝ reverse of 2nd and 4th rows (boustrophedon)
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
⊖ at 2 4 ⊢M ⍝ exchange of 2nd and 4th rows →gauss_jordan←
1 2 3 4 5
16 17 18 19 20
11 12 13 14 15
6 7 8 9 10
21 22 23 24 25
⍙←{⍵⍵⍣¯1 ⍺⍺ ⍵⍵ ⍵} ⍝ model for under/dual: ⍢
⌽ at 2 4⍙⍉ ⊢M ⍝ reverse of alternate cols (Anc. Mongolian)
1 22 3 24 5
6 17 8 19 10
11 12 13 14 15
16 7 18 9 20
21 2 23 4 25
0 at 2 4⍤1 at 2 4 ⊢M ⍝ cf: M[2 4;2 4]←0
1 2 3 4 5
6 0 8 0 10
11 12 13 14 15
16 0 18 0 20
21 22 23 24 25
0 at (2 4∘.,2 4) ⊢5 5⍴⍳25 ⍝ ditto using choose indexing
1 2 3 4 5
6 0 8 0 10
11 12 13 14 15
16 0 18 0 20
21 22 23 24 25
(2 2⍴⎕a)⊣at 2 4⍤1 at 2 4 ⊢M ⍝ cf: M[2 4;2 4]←2 2⍴⎕A
1 2 3 4 5
6 A 8 B 10
11 12 13 14 15
16 C 18 D 20
21 22 23 24 25
'⍟'at(1 5)(2 2)⊢'hello' 'world' ⍝ reach
┌─────┬─────┐
│hell⍟│w⍟rld│
└─────┴─────┘
10×at 2 4 ⊢⍳5 ⍝ 10× at ...
1 20 3 40 5
1+at 2 2 ⊢5/0 ⍝ nb: dups ignored
0 1 0 0 0
3 at(⊂⍬) ⊢4 ⍝ test of scalar substitution
3
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ boolean selection:
'*'at(∊∘'AEIOU') ⎕A ⍝ vowels
*BCD*FGH*JKLMN*PQRST*VWXYZ
100×at(2∘|) ⊢M ⍝ alternately × 100
100 2 300 4 500
6 700 8 900 10
1100 12 1300 14 1500
16 1700 18 1900 20
2100 22 2300 24 2500
{∊¨(0=3 5∘|¨⍵)/¨⊂'fizz' 'buzz'}at{0∨.=3 5∘.|⍵} 2 3 8⍴⍳48 ⍝ FizzBuzz
┌────┬────┬────┬────┬────────┬────────┬────────┬────┐
│1 │2 │fizz│4 │buzz │fizz │7 │8 │
├────┼────┼────┼────┼────────┼────────┼────────┼────┤
│fizz│buzz│11 │fizz│13 │14 │fizzbuzz│16 │
├────┼────┼────┼────┼────────┼────────┼────────┼────┤
│17 │fizz│19 │buzz│fizz │22 │23 │fizz│
└────┴────┴────┴────┴────────┴────────┴────────┴────┘
┌────┬────┬────┬────┬────────┬────────┬────────┬────┐
│buzz│26 │fizz│28 │29 │fizzbuzz│31 │32 │
├────┼────┼────┼────┼────────┼────────┼────────┼────┤
│fizz│34 │buzz│fizz│37 │38 │fizz │buzz│
├────┼────┼────┼────┼────────┼────────┼────────┼────┤
│41 │fizz│43 │44 │fizzbuzz│46 │47 │fizz│
└────┴────┴────┴────┴────────┴────────┴────────┴────┘
3 4 at⊢¨ 2⍴⊂1 1 0 ⍝ left operand 3 4: bound to @
┌─────┬─────┐
│3 4 0│3 4 0│
└─────┴─────┘
3 4 ⊣at⊢¨ 2⍴⊂1 1 0 ⍝ left argument 3 4: distribution by ¨
┌─────┬─────┐
│3 3 0│4 4 0│
└─────┴─────┘
0 at {1} ⍳3 ⍝ single item result distributed each-wise
0 0 0
0 at {0} ⍳3
1 2 3
{(≢⍵)⍴⎕A}@(1∘pco) 6 7⍴ ⍳42 ⍝ vector ABC... for primes [GC]
1 A B 4 C 6 D
8 9 10 E 12 F 14
15 16 G 18 H 20 21
22 I 24 25 26 27 28
J 30 K 32 33 34 35
36 L 38 39 40 M 42
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ errors:
'*'at(2 2⍴⍳4)⊢5 5⍴⎕A ⍝ simple index selector rank too high
4::RANK ERROR
'*'at(⍉∊∘'AEIOU') 4 5⍴⎕A ⍝ mask not conformable with right arg
5::LENGTH ERROR
'abc'at{1 0 1} 3 4⍴⎕A ⍝ new values not conformable with selection
5::LENGTH ERROR
0(1 at 2)⍳3 ⍝ ⍺ and ⍺⍺ can't both be arrays
2::SYNTAX ERROR
1 at{2}⍳3 ⍝ function ⍵⍵ must return bool result
11::DOMAIN ERROR
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝
⍝ Roger Hui's model of "Mesh" and "Mask", implemented using [at]:
⍝ Mesh (APL, 1962) -------------------------------------------------------------
⍝ c ← a (u Mesh) b ←→ ((~u)⌿c)≡a and (u⌿c)≡b
⎕io←0
a ← 33 44 55
b ← ⍳10
u ← 1 1 0 1 1 1 1 0 1 1 1 0 1
↑ u (b at(u⊣⊣) (~u)⍀a)
1 1 0 1 1 1 1 0 1 1 1 0 1
0 1 33 2 3 4 5 44 6 7 8 55 9
c←b at(u⊣⊣) (~u)⍀a
a ≡ (~u)⌿c
1
b ≡ u⌿c
1
c ≡ b at(u/⍳≢u) ⊢(~u)⍀a
1
⍝ The last version with the integer right operand is required for meshing major
⍝ cells.
a←2⍴⍤0 ⊢33 44 55
b←2⍴⍤0 ⍳10
c ← b at(u/⍳≢u) ⊢(~u)⍀a
a ≡ (~u)⌿c
1
b ≡ u⌿c
1
⍝ Mask (APL, 1962) -------------------------------------------------------------
⍝ c ← a (u Mask) b ←→ ((~u)⌿c)≡(~u)⌿a and (u⌿c)≡u⌿b
⍝ For numeric vectors a and b,
a ← ⍳13
b ← 20+⍳13
u ← 13⍴0 0 1
c ← (a×~u) + b×u
↑ u (b (u⌿⊣)at(u⊣⊣) a)
0 0 1 0 0 1 0 0 1 0 0 1 0
0 1 22 3 4 25 6 7 28 9 10 31 12
c ← b (u⌿⊣)at(u⊣⊣) a
((~u)⌿c) ≡ (~u)⌿a
1
(u⌿c)≡u⌿b
1
c ≡ b (u⌿⊣)at(u/⍳≢u) ⊢a
1
⍝ Again, the last version with the integer right operand is required for masking
⍝ major cells.
a ← 2⍴⍤0 ⊢⍳13
b ← 2⍴⍤0 ⊢20+⍳13
c ← b (u⌿⊣)at(u/⍳≢u) ⊢a
((~u)⌿c) ≡ (~u)⌿a
1
(u⌿c)≡u⌿b
1
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ Prefix agreement
⍝ Aaron Hsu
'*'at{1 0 1} 3 4⍴⍳12 ⍝ vector mask vs matrix rarg
* * * *
4 5 6 7
* * * *
'*'⊣at((0=10|⊃)⍤2)5 5 5⍴⍳75 ⍝ Aaron's example
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
25 26 27 28 29
30 31 32 33 34
35 36 37 38 39
40 41 42 43 44
45 46 47 48 49
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
25 26 27 28 29
30 31 32 33 34
35 36 37 38 39
40 41 42 43 44
45 46 47 48 49
10×at{3 4⍴1 0 0} 3 4 5⍴⍳5 ⍝ higher rank example
0 10 20 30 40
0 1 2 3 4
0 1 2 3 4
0 10 20 30 40
0 1 2 3 4
0 1 2 3 4
0 10 20 30 40
0 1 2 3 4
0 1 2 3 4
0 10 20 30 40
0 1 2 3 4
0 1 2 3 4
'efgh'at{0 1 0} 3 4⍴ ⎕A ⍝ unit axes not ignored
5::LENGTH ERROR
(↑,↓'efgh')at{0 1 0} 3 4⍴ ⎕A ⍝ conv to 1-row matrix
ABCD
efgh
IJKL
⍝∇ at pco
Back to: code
Back to: Workspaces