# Phrases/Selection

## Contents

### Creating an Empty List

NB. y is anything; result is a list of 0 items, each like y noneof =: ($0)&(]"0 _)

### Culling

Given an array and a predicate, keep only those items for which the predicate is true

NB. Adverb. If [x] u y is 1, keep that element of y usedtocull =: 1 : 'u # ]'

### Substring

NB. x is (starting position,length), y is list NB. result is the selected portion substr =: (];.0~ ,.)~"1 _

### Open a Column

ocol =: >@:({"1)

### Select Leading or Trailing Elements, but Not Running Off the End

NB. like {., but limited to the length of y leading =: ((<. #) {. ])"0 _ NB. like - ux_vy {., but limited to the length of y trailing =: (-@(<. #) {. ])"0 _

### Insert Inside Multilevel Boxed Array

`m` gives the path, like that used by `{::`. `x` is put inside the box at that
position in the path.

NB. Adverb. Install x in the path given by m store =: 1 : 0 : if. #m do. (< x (}.m)store ({.m){::y) ({.m)} y else. x end. )

### Apply Verbs on Selected Items

The `onitem` conjunctions apply `u` to the cells of `y` selected my `n` . There are bivalent, monadic, and dyadic forms.

NB. Conjunction. u is verb, n (or [x] v y) is arg to { to select s = desired portion of y NB. The result of x u s (if dyad) or u s (if monad) replaces s onitem =: 2 : '(u bivalent (n&{)) n} ]' onitemm =: 2 : 'n}~ u@:(n&{)' onitemd =: 2 : '(u (n&{)) n} ]'

`applyintree` applies `u` at the cell whose path is `n` .

NB. Conjunction. Apply u at the cell indicated by n applyintree =: 2 : 0 if. #n do. ((u applyintree (}.n)) L:_1 ({.n){y) ({.n)} y else. u y end. : NB. The rank is s,0 where s is the surplus of x-rank over y-rank. This causes NB. the cells of y to be matched up with the largest appropriate blocks x This NB. is necessary because it is impossible to change the shape of the values being modified if. #n do. (x u applyintree (}.n) L:_ _1"(0 (,~ >.) x -&(#@$) a) (a =. ({.n){y)) ({.n)} y else. x u y end. )