Over: Difference between revisions

Jump to navigation Jump to search
2,548 bytes added ,  28 January
m
Text replacement - "KAP" to "Kap"
(Created page with "{{Built-in|Over|<nowiki>⍥</nowiki>}} is a dyadic operator which takes two functions and produce a function (<source lang=apl inline>⍥</source>). == Explanati...")
 
m (Text replacement - "KAP" to "Kap")
 
(13 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Built-in|Over|<nowiki></nowiki>}} is a [[dyadic operator]] which takes two [[function]]s and produce a [[function]] (<source lang=apl inline>⍥</source>).
{{Built-in|Over|⍥}} is a [[primitive operator|primitive]] [[dyadic operator]] which takes two [[function]] [[operand]]s and produces a [[derived function]] which pre-processes the argument(s) using the monadic right operand, before applying the left operand on/between the result(s).


== Explanation ==
== Explanation ==
When the resulting function is used [[monadic]]ally, it is the same as [[Atop]].
When the resulting function is used [[monadic]]ally, it has the same behaviour as if the [[Beside]] or [[Atop (operator)|Atop]] operator had been used:
{|
{|
|<source lang=apl>  (g ⍥ h) ⍵</source>|| {{←→}} ||<source lang=apl>g (h ⍵)</source>
|<syntaxhighlight lang=apl>  (g ⍥ h) ⍵</syntaxhighlight>|| {{←→}} ||<syntaxhighlight lang=apl>g (h ⍵)</syntaxhighlight>
|}
|}
When the resulting function is used [[dyadic]]ally, then it forms an [[Over]] expression (which is the true purpose of this operator).
When the resulting function is used [[dyadic]]ally, both arguments are pre-processed:
{|
{|
|<source lang=apl>⍺ (g ⍥ h) ⍵</source>|| {{←→}} ||<source lang=apl>(h ⍺) g (h ⍵)</source>
|<syntaxhighlight lang=apl>⍺ (g ⍥ h) ⍵</syntaxhighlight>|| {{←→}} ||<syntaxhighlight lang=apl>(h ⍺) g (h ⍵)</syntaxhighlight>
|}
|}


== Examples ==
== Examples ==
<source lang=apl>
<syntaxhighlight lang=apl>
       x←1 2 3
       x←3 1 2
       y←4 5 6
       y←4 6 5
    x +⍥(⌈/) y ⍝ add the max of x and max of y
      x +⍥(⌈/) y ⍝ add the max of x and max of y
9
9
       ⍝ same as
       ⍝ same as
       (⌈/x)+⌈/y
       (⌈/x)+⌈/y
9
9
</source>
</syntaxhighlight>
 
== Close composition ==
 
In [[SHARP APL]] and [[J]], Over is implemented as a [[close composition]], meaning that (using SHARP syntax) <syntaxhighlight lang=apl inline>f⍤g</syntaxhighlight> has the overall [[function rank]] of <syntaxhighlight lang=apl inline>g</syntaxhighlight>. J uses <code>&</code> for the close form and <code>&:</code> for the rankless form that appears in modern APLs.
 
== History ==
 
[[Ken Iverson]] defined Over in 1978 as part of [[Operators and Functions]],<ref>[[Ken Iverson]]. [https://www.jsoftware.com/papers/opfns.htm ''Operators and Functions''], §8 Composition and Duality. IBM Research Report #RC7091. 1978-04-26.</ref> with the glyph <syntaxhighlight lang=apl inline>¨</syntaxhighlight>. He called it Composition, as there was no [[Atop operator]]. It was added to [[SHARP APL]] as a [[close composition]] with glyph <syntaxhighlight lang=apl inline>⍤</syntaxhighlight> and name "on", with a limited implementation in 1981<ref>[https://www.jsoftware.com/papers/satn41.htm "Composition and Enclosure"]. SATN-41, 1981-06-20.</ref> followed by a full implementation in 1983 with the introduction of [[function rank]].<ref>[https://www.jsoftware.com/papers/satn45.htm "Language Extensions of May 1983"]. SATN-45, 1983-05-02.</ref>
 
The glyph <syntaxhighlight lang=apl inline>⍥</syntaxhighlight> appeared in [[NARS2000]], with name "Composition", by 2011.<ref>[http://wiki.nars2000.org/index.php?title=Composition Composition]. [[NARS2000]] Wiki.</ref> The name "Over" was used in [[Dyalog APL 18.0]], suggested by [[Adám Brudzewsky]].<ref>Adam Brudzewsky. Chat message {{m|42021088}}. [[APL Orchard]]. 31 Dec 2017.</ref> Over also appears in [[dzaima/APL]] (since 2018, before Dyalog 18.0), [[April]], and [[Kap]].
 
== External links ==
=== Lessons ===
* [https://chat.stackexchange.com/rooms/52405/conversation/lesson-47-atop--and-over-#55084108 APL Cultivation]
=== Documentation ===
* [https://help.dyalog.com/latest/#Language/Primitive%20Operators/Over.htm Dyalog]
* J [https://www.jsoftware.com/help/dictionary/d632.htm Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/ampco NuVoc]
* [https://mlochbaum.github.io/BQN/doc/compose.html BQN]
 
== References ==
<references/>
{{APL built-ins}}[[Category:Primitive operators]][[Category:Composition operators]]

Navigation menu