```rslt ← indx ##.select avec              ⍝ ⍺-selection of items from vector ⍵.

[indx]  is an S-array (an array of shape S), each item of which is an index into
the  vector of S-arrays [avec]. An item of avec may also be a single item array,
in which case it is notionally S-reshaped.

The  resulting  S-array is an item-wise selection of corresponding elements from
the items of avec.

Note  that in origin-0, the left argument may be a boolean array to select items
from a pair of false-true arrays on the right.

Select may often be used as a pure, though expensive, alternative to partial as-
signments ]← and )←.

(
Bob Bernecky points us to Ken Iverson's "mask":

"The MASK operation is defined formally as follows:

c ← /a,u,b/ <==> (~u)/c = (~u)/a,  and  u/c = u/b.

The vectors c, a, u, and b are clearly of a common dimension and
c[i]= a[i] or b[i], according as u[i] = 0 or u[i] = 1."

Ref: Kenneth E. Iverson, "A Programming Language", p21, Wiley, 1962.

http://www.jsoftware.com/papers/APL.htm
)

Technical note:

Note that in the coding for select:

select←{              ⍝ ⍺-selection of items of vector ⍵.
⍺⊃¨↑,¨/⊂¨¨⍵
}

⍺  and  ⍵  appear  just once at each end of the selection expression. This means
that, if we bound adjacent _functions_ in the expression using compose operators
we could express select as a single derived function. See →tacit←

select ← ⊃¨∘↑∘(,¨/)∘(⊂¨¨)   ⍝ derived function for select.

select dft 1                ⍝ show derived function tree.
∘
┌─────┴─────┐
∘           ¨
┌───┴───┐     ┌─┘
∘       /     ¨
┌─┴─┐   ┌─┘   ┌─┘
¨   ↑   ¨     ⊂
┌─┘     ┌─┘
⊃       ,

However, there is not much of a case for doing so. Although the resulting funct-
ion is arguably "cute", it runs no quicker and is harder to maintain.

Examples:

2 1 2 2 1 select (1 2 3 4 5)(10 20 30 40 50)        ⍝ selection from vectors
10 2 30 40 5

⊢ mats ← 5 5∘⍴¨⎕a(lcase ⎕a)⎕d                       ⍝ vector of matrices
┌─────┬─────┬─────┐
│ABCDE│abcde│01234│
│FGHIJ│fghij│56789│
│KLMNO│klmno│01234│
│PQRST│pqrst│56789│
│UVWXY│uvwxy│01234│
└─────┴─────┴─────┘

⎕←indx←5 5⍴⍳3                       ⍝ selection matrix.
1 2 3 1 2
3 1 2 3 1
2 3 1 2 3
1 2 3 1 2
3 1 2 3 1

indx select mats                    ⍝ selection from matrices.
Ab2De
5Gh8J
k1Mn4
Pq7St
0Vw3Y

chars                               ⍝ character matrix.
now is
the time

(⎕io+chars=' ')select chars '.'     ⍝ dots for blanks.
now.is..
the.time

⍝ The following function swaps box-drawing characters for the clunky equivalents
⍝ that old-fashioned printers preferred:

clunk←{                     ⍝ Printer friendly characters.
fm←'┌┬┐├┼┤└┴┘│─'        ⍝ box drawing characters.
to←'...|+|''''''|-'     ⍝ equivalent clunky chars.
(fm⍳⍵)select to,⊂⍵      ⍝ printer-friendly substitution.
}

disp ⍳¨⍳2 2                 ⍝ char mat with box-drawing characters
┌─────┬─────────┐
│┌───┐│┌───┬───┐│
││1 1│││1 1│1 2││
│└───┘│└───┴───┘│
├─────┼─────────┤
│┌───┐│┌───┬───┐│
││1 1│││1 1│1 2││
│├───┤│├───┼───┤│
││2 1│││2 1│2 2││
│└───┘│└───┴───┘│
└─────┴─────────┘

clunk disp ⍳¨⍳2 2           ⍝ clunky equivalents.
.-----.---------.
|.---.|.---.---.|
||1 1|||1 1|1 2||
|'---'|'---'---'|
|-----+---------|
|.---.|.---.---.|
||1 1|||1 1|1 2||
||---|||---+---||
||2 1|||2 1|2 2||
|'---'|'---'---'|
'-----'---------'

⊢ cubes ← 1 10 100×⊂2 3 4⍴⍳24       ⍝ vector of higher-rank arrays.
┌───────────┬───────────────┬───────────────────┐
│ 1  2  3  4│ 10  20  30  40│ 100  200  300  400│
│ 5  6  7  8│ 50  60  70  80│ 500  600  700  800│
│ 9 10 11 12│ 90 100 110 120│ 900 1000 1100 1200│
│           │               │                   │
│13 14 15 16│130 140 150 160│1300 1400 1500 1600│
│17 18 19 20│170 180 190 200│1700 1800 1900 2000│
│21 22 23 24│210 220 230 240│2100 2200 2300 2400│
└───────────┴───────────────┴───────────────────┘

⎕←indx←2 3 4⍴⍳3                   ⍝ higher-rank index array.
1 2 3 1
2 3 1 2
3 1 2 3

1 2 3 1
2 3 1 2
3 1 2 3

indx select cubes                 ⍝ selection of higher rank arrays.
1   20  300    4
50  600    7   80
900   10  110 1200

13  140 1500   16
170 1800   19  200
2100   22  230 2400