Vocabulary/ampco

From J Wiki
Jump to navigation Jump to search

>> <<   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

  1. 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.
  2. 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:

flow diagram of the appose conjunction

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 @