Vocabulary/ampv

From J Wiki
Jump to: navigation, search

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

[x] u&v y Compose Conjunction

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



Applies v to each cell of each argument, and then applies u to the result(s) of v for each cell separately

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

   *:&+: 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 (&).

2. The difference between Appose (u&:v) and Compose (u&v) is shown in the last two columns of the diagram below:

Funcomp.png

The above diagram also shows At (@:) and Atop (@) for overall comparison.

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