Reverse Compose: Difference between revisions
No edit summary 
m (correct definition of monadic Reverse Compose as (f Y) g Y) 

(7 intermediate revisions by 2 users not shown)  
Line 1:  Line 1:  
{{BuiltinReverse Compose⍛}}  {{BuiltinReverse Compose⍛}} or '''Behind''' is a [[primitive operator]] closely related to [[Beside]] (<syntaxhighlight lang=apl inline>∘</syntaxhighlight>), which appears in [[Extended Dyalog APL]] and [[dzaima/APL]]. Called [[dyaddyadically]] with function operands <syntaxhighlight lang=apl inline>f</syntaxhighlight> and <syntaxhighlight lang=apl inline>g</syntaxhighlight>, it uses <syntaxhighlight lang=apl inline>f</syntaxhighlight> [[monadmonadically]] to preprocesses the left argument before applying <syntaxhighlight lang=apl inline>g</syntaxhighlight> between the preprocessed 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 defines<ref>[[Adám BrudzewskyBrudzewsky, Adám]]. Dyalog APL Vision. [https://github.com/abrudz/dyalog_vision/blob/main/JotUnderbar.aplo JotUnderbar].</ref> 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 ==  
Its plain usage is to preprocess left arguments without needing one or more applications of Commute (<  Its plain usage is to preprocess left arguments without needing one or more applications of Commute (<syntaxhighlight lang=apl inline>⍨</syntaxhighlight>). For example, the square of the left argument minus the right argument can be expressed as:  
[https://tio.run/##SyzI0U2pTMzJT9dNrShJzUtJTfn//1Hf1EdtE4wPT3/Uu@JR72xdo///AQ Try it online!]<  [https://tio.run/##SyzI0U2pTMzJT9dNrShJzUtJTfn//1Hf1EdtE4wPT3/Uu@JR72xdo///AQ Try it online!]<syntaxhighlight lang=apl>  
3×⍨⍛2  3×⍨⍛2  
7  7  
</  </syntaxhighlight>{{Works in[[dzaima/APL]], [[Extended Dyalog APL]]}}  
It can also be combined with Beside to create the [[splitcompose]] 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 [[splitcompose]] 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:  
[https://tio.run/##SyzI0U2pSszMTfz//1Hf1EdtE4wVDq03VDA5PP1R72wg0TGj5tB6I6CYuYLh//8A Try it online!]<  [https://tio.run/##SyzI0U2pSszMTfz//1Hf1EdtE4wVDq03VDA5PP1R72wg0TGj5tB6I6CYuYLh//8A Try it online!]<syntaxhighlight lang=apl>  
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]]}}  
== External links ==  
=== Documentation ===  
* [https://mlochbaum.github.io/BQN/doc/hook.html BQN] (as <code>⊸</code>)  
=== Publications ===  
* [https://github.com/abrudz/primitives/blob/main/behind.aplf APL model]  
== References ==  == References ==  
<references/>  <references/>  
{{APL builtins}}[[Category:Primitive operators]][[Category:Composition operators]]  {{APL builtins}}[[Category:Primitive operators]][[Category:Composition operators]] 
Latest revision as of 20:43, 24 October 2022
⍛

Reverse Compose (⍛
) or Behind is a primitive operator closely related to Beside (∘
), which appears in Extended Dyalog APL and dzaima/APL. Called dyadically with function operands f
and g
, it uses f
monadically to preprocesses the left argument before applying g
between the preprocessed 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 defines^{[1]} 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 preprocess 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 splitcompose 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
External links
Documentation
 BQN (as
⊸
)
Publications
References
 ↑ Brudzewsky, Adám. Dyalog APL Vision. JotUnderbar.