Reverse Compose: Difference between revisions
m (correct definition of monadic Reverse Compose as (f Y) g Y) |
(aka "behind") |
||
(3 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
{{Built-in|Reverse Compose|⍛}} or '''Behind''' is a [[primitive operator]] closely related to [[Beside]] (<syntaxhighlight lang=apl inline>∘</syntaxhighlight>), which appears in [[Extended Dyalog APL]] | {{Built-in|Reverse Compose|⍛}}, '''Before''' or '''Behind''' is a [[primitive operator]] closely related to [[Beside]] (<syntaxhighlight lang=apl inline>∘</syntaxhighlight>), which appears in [[Extended Dyalog APL]], [[dzaima/APL]], [[April]] and [[Kap]]. Called [[dyad|dyadically]] with function operands <syntaxhighlight lang=apl inline>f</syntaxhighlight> and <syntaxhighlight lang=apl inline>g</syntaxhighlight>, it uses <syntaxhighlight lang=apl inline>f</syntaxhighlight> [[monad|monadically]] to pre-processes the left argument before applying <syntaxhighlight lang=apl inline>g</syntaxhighlight> between the pre-processed left argument and the given right argument. <syntaxhighlight lang=apl inline>X f⍛g Y</syntaxhighlight> is thus equivalent to <syntaxhighlight lang=apl inline>(f X) g Y</syntaxhighlight>. The operator can be defined as the [[dop]] <syntaxhighlight lang=apl inline>{(⍺⍺ ⍺) ⍵⍵ ⍵}</syntaxhighlight>. This dyadic definition matches the [[hook]] function Before, represented as <code>⊸</code> in [[BQN]]. | ||
Unlike Before, the [[monad]]ic case of Reverse Compose has differed across implementations. When introduced by [[Extended Dyalog APL]], <syntaxhighlight lang=apl inline>f⍛g Y</syntaxhighlight> evaluated to <syntaxhighlight lang=apl inline>g Y</syntaxhighlight>, but the later Dyalog APL Vision | Unlike Before, the [[monad]]ic case of Reverse Compose has differed across implementations. When introduced by [[Extended Dyalog APL]], <syntaxhighlight lang=apl inline>f⍛g Y</syntaxhighlight> evaluated to <syntaxhighlight lang=apl inline>g Y</syntaxhighlight>, but the later [[Dyalog APL Vision]], as well as [[April]] and [[Kap]], define it to be <syntaxhighlight lang=apl inline>(f Y) g Y</syntaxhighlight>, matching Before. This later definition might also be written <syntaxhighlight lang=apl inline>f⍛g</syntaxhighlight>{{←→}}<syntaxhighlight lang=apl inline>f⍛g⍨⍨</syntaxhighlight>{{←→}}<syntaxhighlight lang=apl inline>g⍨∘f⍨</syntaxhighlight>. In [[dzaima/APL]] the monadic case is simply an error. | ||
== Common usage == | == Common usage == | ||
Line 9: | Line 9: | ||
3×⍨⍛-2 | 3×⍨⍛-2 | ||
7 | 7 | ||
</syntaxhighlight>{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]]}} | </syntaxhighlight>{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]], [[Kap]]}} | ||
It can also be combined with Beside to create the [[split-compose]] construct. Here, we take the [[sign]] of the left argument and apply it to (that is, multiply it with) the absolute value of the right argument: | It can also be combined with Beside to create the [[split-compose]] construct. Here, we take the [[sign]] of the left argument and apply it to (that is, multiply it with) the absolute value of the right argument: | ||
Line 15: | Line 15: | ||
3 ¯1 4×⍛×∘|¯2 ¯7 1 | 3 ¯1 4×⍛×∘|¯2 ¯7 1 | ||
2 ¯7 1 | 2 ¯7 1 | ||
</syntaxhighlight>{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]]}} | </syntaxhighlight>{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]], [[Kap]]}} | ||
== External links == | == External links == | ||
=== Documentation === | === Documentation === | ||
* [https://kapdemo.dhsdevelopments.com/reference.html#_inverse_compose Kap] | |||
* [https://mlochbaum.github.io/BQN/doc/hook.html BQN] (as <code>⊸</code>) | * [https://mlochbaum.github.io/BQN/doc/hook.html BQN] (as <code>⊸</code>) | ||
=== Publications === | === Publications === | ||
* [https://github.com/abrudz/primitives/blob/main/behind.aplf APL model] | * [https://github.com/abrudz/primitives/blob/main/behind.aplf APL model] | ||
{{APL built-ins}}[[Category:Primitive operators]][[Category:Composition operators]] | {{APL built-ins}}[[Category:Primitive operators]][[Category:Composition operators]] |
Latest revision as of 13:57, 28 June 2024
⍛
|
Reverse Compose (⍛
), Before or Behind is a primitive operator closely related to Beside (∘
), which appears in Extended Dyalog APL, dzaima/APL, April and Kap. Called dyadically with function operands f
and g
, it uses f
monadically to pre-processes the left argument before applying g
between the pre-processed left argument and the given right argument. X f⍛g Y
is thus equivalent to (f X) g Y
. The operator can be defined as the dop {(⍺⍺ ⍺) ⍵⍵ ⍵}
. This dyadic definition matches the hook function Before, represented as ⊸
in BQN.
Unlike Before, the monadic case of Reverse Compose has differed across implementations. When introduced by Extended Dyalog APL, f⍛g Y
evaluated to g Y
, but the later Dyalog APL Vision, as well as April and Kap, define it to be (f Y) g Y
, matching Before. This later definition might also be written f⍛g
f⍛g⍨⍨
g⍨∘f⍨
. In dzaima/APL the monadic case is simply an error.
Common usage
Its plain usage is to pre-process left arguments without needing one or more applications of Commute (⍨
). For example, the square of the left argument minus the right argument can be expressed as:
3×⍨⍛-2 7
It can also be combined with Beside to create the split-compose construct. Here, we take the sign of the left argument and apply it to (that is, multiply it with) the absolute value of the right argument:
3 ¯1 4×⍛×∘|¯2 ¯7 1 2 ¯7 1