>> << Ndx Usr Pri Phr Dic Rel Voc !: wd Help Phrases

# 3A. Indexing

`{` 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 4 2){y | Items 1 4 2
n24=: (<<<1 4 2){y | All but items 1 4 2
n25=: (<<<1 4){y | All but items 1 4
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)

>> << Ndx Usr Pri Phr Dic Rel Voc !: wd Help Phrases