{ encompasses everything performed by bracket indexing in other languages. The ranks are 0 _ , that is, x{y can be considered individually for each scalar in x and for y in toto, with the overall result constructed from the individual results in the same way as for all other functions. For scalar x then:
>x is a scalar or a list, and r=:>j{,>x are the indices for axis j. r may be integers in the range i.&.(+&n)n=:j{$y, which selects cells n|r, or r may be boxed integers in that range, in which case the selected cells are all except those in n|r. Thus:
z=: 0{y=: 3 3 3$'ABCDEFGHIJKLMNOPQRSTUVWXYZ]'
ibbb=: <ibb=: <ib=: <i=: 1 _1
jbbb=: <jbb=: <jb=: <j=: 2 1
ijbbb=: <ijbb=: <ijb=: <ij=: 2 2$i,j
(] ; i&{ ; ib&{ ; ibb&{ ; ibbb&{) z
+-----------------+
¦ABC¦DEF¦F¦DEF¦ABC¦
¦DEF¦GHI¦ ¦GHI¦ ¦
¦GHI¦ ¦ ¦ ¦ ¦
+-----------------+
ijb{y
¦rank error
¦ ijb {y
(] ; i&{ ; ijbb&{ ; ijbbb&{) z
+---------------+
¦ABC¦DEF¦DEF¦ABC¦
¦DEF¦GHI¦GHI¦ ¦
¦GHI¦ ¦ ¦ ¦
¦ ¦ ¦GHI¦ ¦
¦ ¦ ¦DEF¦ ¦
+---------------+
The amend adverb } applied to an index produces a function that replaces the selected part of the right argument by the left argument. For example:
'*' ib} z
ABC
DE*
GHI
('def',:'ghi') i} z
ABC
def
ghi
(] ; i&{ ; ib&{ ; ibb&{ ; ibbb&{)"2 y
+-----------------+
¦ABC¦DEF¦F¦DEF¦ABC¦
¦DEF¦GHI¦ ¦GHI¦ ¦
¦GHI¦ ¦ ¦ ¦ ¦
+---+---+-+---+---¦
¦JKL¦MNO¦O¦MNO¦JKL¦
¦MNO¦PQR¦ ¦PQR¦ ¦
¦PQR¦ ¦ ¦ ¦ ¦
+---+---+-+---+---¦
¦STU¦VWX¦X¦VWX¦STU¦
¦VWX¦YZ]¦ ¦YZ]¦ ¦
¦YZ]¦ ¦ ¦ ¦ ¦
+-----------------+
$(<<'') { z
0 3
$(<a:) { z
0 3
Indexing on higher-rank arrays may be illustrated by the argument y:
]k=: <1 2;a:;0 2
+------------+
¦+----------+¦
¦¦1 2¦++¦0 2¦¦
¦¦ ¦¦¦¦ ¦¦
¦¦ ¦++¦ ¦¦
¦+----------+¦
+------------+
y ; k{y
+------+
¦ABC¦JL¦
¦DEF¦MO¦
¦GHI¦PR¦
¦ ¦ ¦
¦JKL¦SU¦
¦MNO¦VX¦
¦PQR¦Y]¦
¦ ¦ ¦
¦STU¦ ¦
¦VWX¦ ¦
¦YZ]¦ ¦
+------+
The following examples further illustrate the use of the indexing function. For each example, it may be instructive to plug the values into the expression r=:>j{,>x and work out the result.
| n0=: y=: i.4 5 6 7 | Array used in examples |
| n1=: (<,<3){y | Item 3 of y |
| n2=: (<,3){y | Item 3 of y |
| n3=: (<3){y | Item 3 of y |
| n4=: 3{y | Item 3 of y |
| n5=: (<,<_1){y | The last item of y (item _1 of y) |
| n6=: (<,_1){y | The last item of y (shape 5 6 7) |
| n7=: (<_1){y | The last item of y |
| n8=: _1{y | The last item of y |
| n9=: (_1+#y){y | The last item of y |
| n10=: 0{y | The first item of y |
| n11=: (-#y){y | The first item of y |
| n12=: 3 0 _2 0{y | Items 3 0 _2 0 of y |
| n13=: i=: ?2 3$0{$y | Indices used in examples |
| n14=: j=: ? 1{$y | Indices used in examples |
| n15=: k=: ?7 $2{$y | Indices used in examples |
| n16=: (<i;j;k){y | y[i;j;k;]in APL notation |
| n17=: (<1;2;3){y | y[1;2;3;] |
| n18=: (<1,2,3){y | y[1;2;3;] |
| n19=: (<1 2 3){y | y[1;2;3;] |
| n20=: (<<i){y | y[i;;;;] |
| n21=: (<<,i){y | y[,i;;...;] |
| n22=: (,i){y | y[,i;;...;] |
| n23=: (<<1 3 2){y | Items 1 3 2 |
| n24=: (<<<1 3 2){y | All but items 1 3 2 |
| n25=: (<<<1 3){y | All but items 1 3 |
| n26=: (<<<1){y | All but items 1 |
| n27=: (<<<$0){y | All but items ... none; i.e. all items |
| n28=: (<<a:){y | All items |
| n29=: (<1 3 2;3){y | y[1 3 2;3;;...;]in APL (0-origin) |
| n30=: (<(<1 3 2);3){y | y[(i.#y)-.1 3 2;3;;...;] |
| n31=: (<(<1 3);3){y | y[(i.#y)-.1 3;3;;...;] |
| n32=: (<(<1);3){y | y[(i.#y)-.1;3;;...;] |
| n33=: (<(<$0);3){y | y[(i.#y)-.$0;3;;...;] |
| n34=: (<(<$0);3){y | y[;3;;...;] |
| n35=: (<a:;3){y | y[;3;;...;] |
| n36=: 4{"_1 y | y[;4;;...;] |
| n37=: (<a:;a:;5){y | y[;;5;...;] |
| n38=: 5{"_2 y | y[;;5;...;] |
| n39=: (<1 2){y | Abbreviated (fewer indices than axes) |
| n40=: _2{y | Negative |
| n41=: (<<<3){y | Complementary |
| n42=: (1 2;3 2;0 _2){y | Scattered (non-scalar left argument) |