# Vocabulary/ampv

>>
<< ` `
Back to: Vocabulary
Thru to: Dictionary

`[x] u&v y`Compose Conjunction

Rank *-- depends on the rank of v --*
WHY IS THIS IMPORTANT?

`u&v` is equivalent to `(u&:v)"mv` , where `mv` is the monadic rank of `v`. That is,

u&v y <--> {{u (v y)}}"mv y x u&v y <--> x {{(v x) u (v y)}}"mv y

You should understand Rank (`"`) and Appose (`&:`) before trying to understand Compose (`&`) .

Applies `v` to each ** mv-cell** of each argument, and then applies

`u`to the result(s) of

`v`

**for each**.

`mv`-cell independently('Ike';'James') >&#&> ('Newton';'Bond') NB. Is first name longer than last name? 0 1

This contrasts with `u&:v` which applies `v` to the entire argument(s) and then applies `u` on the entire filled and assembled result(s) of `v` .

- Operand
`v`is executed monadically. - Operand
`u`is executed either monadically or dyadically depending whether`u&v`has been called monadically or dyadically.

See: **More Information** for a visual comparison of At (`@:`), Atop (`@`), Compose (`&`) and Appose (`&:`).

### Common Uses

Monadic

**The monadic use of & is deprecated. Use @ instead.** Some compounds of the form

`f&g`are not recognized for special code in places where

`f@g`is recognized, if only the monadic form of the compounds is eligible for special treatment.

*:&+: 3 4 5 NB. double, then square. Applied to each atom 36 64 100 *: +: 3 4 5 NB. Same result if applied to entire list 36 64 100 +/&+: 3 4 5 NB. Double, then "total". Applied to each atom. 6 8 10 +/ +: 3 4 5 NB. Not the same if applied to entire list! 24

Dyadic

]firstname =: 'Dennis';'Richard';'Ken' +------+-------+---+ |Dennis|Richard|Ken| +------+-------+---+ ]lastname =: 'Ritchie';'Stallman';'Iverson' +-------+--------+-------+ |Ritchie|Stallman|Iverson| +-------+--------+-------+ firstname ,&> lastname NB. Join each first name to last, individually DennisRitchie RichardStallman KenIverson (>firstname) , (>lastname) NB. very different applied to entire array Dennis Richard Ken Ritchie Stallman Iverson firstname (>@[ , >@])"0 lastname NB. equivalent form DennisRitchie RichardStallman KenIverson

### Related Primitives

Atop (`@`),
At (`@:`),
Appose (`&:`),
Hook (`(u v)`),
Fork (`(f g h)`)

### More Information

1. (`[x] u&v y`) is the same as (`[x] u&:v"mv y`) (where `mv` is the monadic rank of `v`).

The second phrase uses Appose (`&:`) instead of **Compose** (`&`).

An illustration of the process follows, extracted from the series of diagrams referenced below:

**Compose** (`u&v`) , Appose (`u&:v`) , Atop (`@`) , and At (`@:`) are also visualized along with verb application and rank here:
a series of flow diagrams

2. So what's the difference between Atop (`@`) and Compose (`&`) ?

None at all, for the *monads* (`u@v`) and (`u&v`)

u&v y ↔ u v y u@v y ↔ u v y

But the *dyads* are different:

x u&v y ↔ (v x) u (v y) x u@v y ↔ u x v y

According to the J Dictionary -- `&:` *is equivalent to* `&` *except that the ranks of the resulting function are infinite; the relation is similar to that between* `@:` *and* `@`

### Oddities

1. The J Dictionary states that `u&v y <==> u v y` and `x u&v y <==> (v x) u (v y)`, but these statements assume that `u&v` is applied at the rank `mv` as defined above.

The correct equivalences for `u&v` are given above.

2. Note also that in u&f&v, f will be applied monadically. If the whole expression is called dyadically, then v is applied to each argument, f applied monadically to each result of v, and then u applied dyadically to the results. Equivalent to fork (f@v@[ u f@v@]).