A user posed the question: Given a list of integers, set each item that is less than n1 to n2 . Can it be expressed without an explicit loop?

## Addition and Multiplication by Boolean Masks

`(x * b) + (y * -.b)`

and y are conformable numeric arrays, and b is a conformable boolean array. An element of the result corresponding to where b is 1,  is taken from x,  where b is 0 , is taken from y .

Using this to answer the original question:

`(list * n1 <: list) + n2 * n1 > list`

## Item Amend

`b}x,:y`

See http://www.jsoftware.com/books/help/release/iamend.htm . The phrase works on non-numeric arrays, and can be generalized to select from more than two cases, c}x,y,...,:z .

Using this to answer the original question:

`(n1 > list)} list,:n2`

## Direct Amend

Amend can also be use dyadically. This phrase also works on non-numeric arrays. Here, x must be conformable as an item or +/b items of y.

`x (I. b)} y.`

Using this to answer the original question:

`n2 (I. n1 > list)} list`

Puzzles/If Then Else or Case (last edited 2008-12-08 10:45:33 by anonymous)