Under
⍢
|
Under (⍢
), or Dual (¨
), is a primitive dyadic operator which takes two function operands. It pre-processes its argument(s) with the monadic right operand, before applying the left operand on/between the result(s), then undoing the pre-processing.[1]
Model
In dialects that support user-defined operators and invertible functions, it can be defined as (or similar):
_U_ ← {⍺←{⍵ ⋄ ⍺⍺} ⋄ ⍵⍵⍣¯1⊢(⍵⍵ ⍺)⍺⍺(⍵⍵ ⍵)}
Examples
⍝ https://leetcode.com/problems/add-two-numbers/ 2 4 3 +_U_(10⊥⌽) 5 6 4 7 0 8
History
The Dual operator, written ¨
, appeared in 1983 both in Rationalized APL and SHARP APL[2] just after. In both cases it was defined to be a close composition, so that the overall function has the rank of the right operand; this allows ¨>
to serve the purpose of Each from a nested APL. Iverson changed the name to Under for his 1987 A Dictionary of APL, and J uses this name as well. It includes both a close form &.
like SHARP and a non-close form &.:
.
Roger Hui proposed Under as a potential addition to Dyalog APL at Dyalog '15, using the glyph ⍢
. This definition was added to both Extended Dyalog APL and dzaima/APL in 2018. Structural Under was developed by Marshall Lochbaum around 2017,[3] and was included in Extended Dyalog initially and added to dzaima/APL in 2020. Later dzaima would implement ⍢×
and ⍢|
in the same spirit, which are featured in dzaima/APL and dzaima/BQN. The language BQN has included structural and computational Under, using the glyph ⌾
, since its initial design in 2020.
External links
- J:
&.
NuVoc, dictionary;&.:
NuVoc, dictionary
References
- ↑ BQN: Circle Jot (⌾)
- ↑ "Language Extensions of May 1983". SATN-45, 1983-05-02.
- ↑ Marshall Lochbaum. BQN's development history: Structural Under.