26
edits
m (Text replacement - "<source" to "<syntaxhighlight") |
Faun Locke (talk | contribs) mNo edit summary |
||
(6 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
'''Split | {{Glyphbox|f⍛g∘h}}[[File:Split_composition.png|frameless|right|200px]] | ||
'''Split composition''' is a [[tacit]] pattern, used to pre-process argument(s) with the outer-most operands before applying the middle operand between the result. Given functions <syntaxhighlight lang=apl inline>f</syntaxhighlight>, <syntaxhighlight lang=apl inline>g</syntaxhighlight>, and <syntaxhighlight lang=apl inline>h</syntaxhighlight>, a split composition on arguments <syntaxhighlight lang=apl inline>x</syntaxhighlight> and <syntaxhighlight lang=apl inline>y</syntaxhighlight> is defined as <syntaxhighlight lang=apl inline>(f x) g (h y)</syntaxhighlight>. | |||
This construct was introduced by the [[I|I language]] as "split-compose", where it is represented with <syntaxhighlight lang=apl inline>O</syntaxhighlight> which also represents the [[Over]] operator - as it too is a split composition with identical outer operands. | |||
In [[Extended Dyalog APL]] and [[dzaima/APL]], | This doesn't appear as a primitive in any APL, nor can it, because it [[composition|composes]] three functions, while a [[Function composition|compositional operator]] can take no more than two [[operands]]. This situation is identical to that of the [[fork]]. Both split compositions and forks can be constructed using companion operators, tying together the three involved functions. | ||
In [[Extended Dyalog APL]] and [[dzaima/APL]], a split composition can be formed using [[Reverse Compose]] (<code>⍛</code>) and [[Compose]] (<code>∘</code>). In this example, we multiply the [[interval]] (integers up until) of the left argument, with the [[Magnitude]] of the right: | |||
<syntaxhighlight lang=apl> | <syntaxhighlight lang=apl> | ||
5 ⍳⍛×∘| 5 ¯8 ¯2 ¯5 3 | 5 ⍳⍛×∘| 5 ¯8 ¯2 ¯5 3 | ||
Line 10: | Line 13: | ||
This is evaluated as <syntaxhighlight lang=apl inline>(⍳5) × (|5 ¯8 ¯2 ¯5 3)</syntaxhighlight>. A further example concatenates the reciprocal of the left argument with the negation of the right: | This is evaluated as <syntaxhighlight lang=apl inline>(⍳5) × (|5 ¯8 ¯2 ¯5 3)</syntaxhighlight>. A further example concatenates the reciprocal of the left argument with the negation of the right: | ||
<syntaxhighlight lang=apl> | <syntaxhighlight lang=apl> | ||
2 | 2 ÷⍛,- 4 | ||
0.5 ¯4 | 0.5 ¯4 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 16: | Line 19: | ||
== Alternatives == | == Alternatives == | ||
In dialects that lack Reverse Compose (and even Compose), split | In dialects that lack Reverse Compose (and even Compose), split compositions can be denoted either by defining the missing operator(s), or as a single derived function or [[fork]], if this is supported. For example, in [[Dyalog APL]] the pattern can be formed with Compose and [[Commute]] (<syntaxhighlight lang=apl inline>⍨</syntaxhighlight>) as <syntaxhighlight lang=apl inline>g⍨∘f⍨∘h</syntaxhighlight>: | ||
<syntaxhighlight lang=apl> | <syntaxhighlight lang=apl> | ||
5 ×⍨∘⍳⍨∘| 5 ¯8 ¯2 ¯5 3 | 5 ×⍨∘⍳⍨∘| 5 ¯8 ¯2 ¯5 3 |
edits