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@]).