Split composition: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
(Created page with "'''Split-compose''' is a point-free construct, used to pre-process the argument(s) with the left, and right-most operand before applying the middle operand between the result....")
 
No edit summary
Line 36: Line 36:


  f⍤⊣ g h⍤⊢
  f⍤⊣ g h⍤⊢
== See also ==
* [[Tacit programming]]
{{APL syntax}}[[Category:Primitive operators]]

Revision as of 12:31, 12 April 2022

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

It's definition is specified 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, & 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