Vocabulary/ampco
>> << Back to: Vocabulary Thru to: Dictionary
[x] u&:v y Appose Conjunction
Rank Infinity -- operates on [x and] y as a whole -- WHY IS THIS IMPORTANT?
Applies verb v to each argument, and then applies verb u dyadically between the result(s).
u&:v y <--> u (v y) x u&:v y <--> (v x) u (v y)
Example:
u =: < NB. x is smaller than y v =: | NB. magnitude csm =: +/ @: u &: v NB. Count how many x's are smaller than y in magnitude _1 2 0 csm 2 _3 0 2
- Verb v is executed monadically.
- Verb 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
- 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.
- u&:v is called for when the rank of v is less than the ranks of an argument, but you want to apply u to the entire result of v.
In the csm example above, we needed (&:) not (&)
_1 2 0 +/@:<&:| 2 _3 0 NB. "csm" example as an anonymous verb in a 1-liner 2 _1 2 0 +/@:<&| 2 _3 0 NB. different result using (&) in place of (&:) 1 1 0
Because | y has rank 0, the entire compound +/@:<&| is applied to each atom of x and y, making the +/ useless since it now operates on each atom individually.
Related Primitives
Atop (@), At (@:), Compose (&), Hook ((u v)), Fork ((f g h))
More Information
1. Contrast Appose (u&:v) with Compose (u&v) which applies v to individual cell(s) and then applies u on the individual result(s) of v
An illustration of the process follows, extracted from the series of diagrams referenced below:
Appose (u&:v) , Compose (u&v) , At (u@:v) , and Atop (u@v) 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 @