Split composition

From APL Wiki
Revision as of 13:51, 12 April 2022 by Marshall (talk | contribs) (Editing; use source blocks)
Jump to navigation Jump to search

Split-compose is a point-free construct, used to pre-process its argument(s) with the left and right-most operand before applying the middle operand between the result.

Given functions F, G, and H, the split composition on arguments x and y is defined as (F x) G (H y).

In BQN, the construct can be formed using Before () and After (), two compositional operators. In this example, we multiply the range of the left argument, with the absolute value of the right.

    5 ↕⊸×⟜| 5‿¯8‿¯2‿¯5‿3
⟨ 0 8 4 15 12 ⟩

Monadically, the right argument can be duplicated and split-compose will be applied asymmetrically, similar to hook

    +´⊸÷⟜≠ ↕10 
⟨ 4.5 ⟩
# This is evaluated as (↕10) +´⊸÷⟜≢ ↕10

Monadically, split-compose is precisely equivalent to a fork.

    (+´÷≠) ↕10
4.5


In dialects that lack Before, split-compose can be defined differently.

In Dyalog APL you may form the expression with Beside (∘) and Commute (⍨)

g∘h⍨∘f⍨

g⍨∘f⍨∘h⍨⍨

For example:

     ÷⍨∘(+/)⍨∘≢⍨⍨ ⍳10
4.5

Whilst these expressions will return the same results (if the functions f, g, and h are pure) the evaluation order is not identical.

And (most commonly) as a fork:

f⍤⊣ g h⍤⊢

See also


APL syntax [edit]
General Comparison with traditional mathematicsPrecedenceTacit programming (Train, Hook, Split composition)
Array Numeric literalStringStrand notationObject literalArray notation (design considerations)
Function ArgumentFunction valenceDerived functionDerived operatorNiladic functionMonadic functionDyadic functionAmbivalent functionDefined function (traditional)DfnFunction train
Operator OperandOperator valenceTradopDopDerived operator
Assignment MultipleIndexedSelectiveModified
Other Function axisBracket indexingBranchStatement separatorQuad nameSystem commandUser commandKeywordDot notationFunction-operator overloadingControl structureComment