# Difference between revisions of "Leading axis agreement"

Jump to navigation Jump to search

Leading axis agreement, sometimes called prefix agreement, is a conformability rule designed for leading axis theory. It states that a dyadic scalar function can be applied between two arrays only if one of their shapes is a prefix of the other. The shape of the result is that of the argument with higher rank.

## Examples

The following examples use J for demonstration purposes.

A scalar dyadic function works when the two arrays have the same shape:

```   ]x =: 2 3 \$ 10
10 10 10
10 10 10
]y =: 2 3 \$ i.6
0 1 2
3 4 5
x + y
10 11 12
13 14 15
```
Works in: J

as well as when one is a scalar:

```   ]x =: 10
10
]y =: 2 3 \$ i.6
0 1 2
3 4 5
x + y
10 11 12
13 14 15
```
Works in: J

The two cases above are already supported in other APLs in the form of scalar extension. J goes one step further, allowing the lower-rank array argument to have nonzero rank, as long as the leading dimensions match:

```   ]x =: 10 20
10 20
]y =: 2 3 \$ i.6
0 1 2
3 4 5
x + y
10 11 12
23 24 25
```
Works in: J

In this case, `x` has shape `2` and `y` has shape `2 3`. Since the leading axes agree and the rank difference is 1, each atom (or 0-cell) of `x` is matched with each row (or 1-cell) of `y`, and the two rows in the result are the results of `10 + 0 1 2` and `20 + 3 4 5`, respectively.

## Aligning axes using the Rank operator

When using the Rank operator for dyadic functions as in `X (f⍤m n) Y`, the frames of `X` and `Y` are checked for conformability. Combined with leading axis agreement, the Rank operator can be used to align the axes to be matched.

```   NB. \$x         : 2|3
NB. \$y         :  |3 2
NB. ------------------
NB. \$x +"1 2 y : 2 3 2
]x =: 2 3 \$ 10 20 30 40 50 60
10 20 30
40 50 60
]y =: 3 2 \$ 1 2 3 4 5 6
1 2
3 4
5 6
x +"1 2 y
11 12
23 24
35 36

41 42
53 54
65 66
```
Works in: J
APL features 
Built-ins Primitive functionPrimitive operatorQuad name
Array model ShapeRankDepthBoundIndex (Indexing) ∙ AxisRavelRavel orderElementScalarVectorMatrixSimple scalarSimple arrayNested arrayCellMajor cellSubarrayEmpty arrayPrototype
Data types Number (Boolean, Complex number) ∙ Character (String) ∙ BoxNamespace
Concepts and paradigms Leading axis theoryScalar extensionConformabilityLeading axis agreementScalar functionPervasionGlyphIdentity elementComplex floorTotal array ordering
Errors LIMIT ERRORRANK ERRORSYNTAX ERRORDOMAIN ERRORLENGTH ERRORINDEX ERRORVALUE ERROR