Pervasion: Difference between revisions
Jump to navigation
Jump to search
m (References section) |
m (Text replacement - "</source>" to "</syntaxhighlight>") Tags: Mobile edit Mobile web edit |
||
Line 1: | Line 1: | ||
'''Pervasion''' during function application is the concept of a function being defined in terms of the [[simple scalar]]s in [[nested array]]s. It is a feature of [[Nested array model|nested]] array languages, while [[Flat array model|flat]] array languages usually do have function pervade into [[boxes]]. Pervasion can be seen as and modelled by [[recursion|recursing]] into all nested elements until the function can be applied to all simple scalars. | '''Pervasion''' during function application is the concept of a function being defined in terms of the [[simple scalar]]s in [[nested array]]s. It is a feature of [[Nested array model|nested]] array languages, while [[Flat array model|flat]] array languages usually do have function pervade into [[boxes]]. Pervasion can be seen as and modelled by [[recursion|recursing]] into all nested elements until the function can be applied to all simple scalars. | ||
[[Scalar function]]s exhibit pervasion by default, whereas [[mixed functions]] and [[Function#Function definition|user defined function]]s do not. The pervading behaviour can be obtained for any function by using enough consecutive [[Each]] operators <source lang=apl inline>¨</ | [[Scalar function]]s exhibit pervasion by default, whereas [[mixed functions]] and [[Function#Function definition|user defined function]]s do not. The pervading behaviour can be obtained for any function by using enough consecutive [[Each]] operators <source lang=apl inline>¨</syntaxhighlight> to reach the simple scalars at the deepest point of nesting in any argument. | ||
In dialects with the [[Depth (operator)|Depth]] operator (<source lang=apl inline>⍥</ | In dialects with the [[Depth (operator)|Depth]] operator (<source lang=apl inline>⍥</syntaxhighlight>), a function can be made pervasive with <source lang=apl inline>⍥0</syntaxhighlight>: | ||
[https://tio.run/##SyzI0U2pTMzJT9dNrShJzUtJTfn/qKPtUduE6kd9U4HUo56mlMzigke9u2ofdbcAxYJdgUR4sLprWWpeibqGenBqcXFmfl5AUSaQq6AO1KyuyfWoo70CqNk5PyVVoeK/X35ecHJiTmKRWx7Y4N6tVupAtUDzFNTT1Gu5NJAV9C410FTQMFAw1FQwVNB41NVkqGCgCXRTOxfItEe9a/4DAA Try it online!] | [https://tio.run/##SyzI0U2pTMzJT9dNrShJzUtJTfn/qKPtUduE6kd9U4HUo56mlMzigke9u2ofdbcAxYJdgUR4sLprWWpeibqGenBqcXFmfl5AUSaQq6AO1KyuyfWoo70CqNk5PyVVoeK/X35ecHJiTmKRWx7Y4N6tVupAtUDzFNTT1Gu5NJAV9C410FTQMFAw1FQwVNB41NVkqGCgCXRTOxfItEe9a/4DAA Try it online!] | ||
Line 14: | Line 14: | ||
│ │ │└──┘│ | │ │ │└──┘│ | ||
└──┴─┴────┘ | └──┴─┴────┘ | ||
</ | </syntaxhighlight> | ||
{{Works in|[[Extended Dyalog APL]], [[dzaima/APL]] since 2020-03-01}} | {{Works in|[[Extended Dyalog APL]], [[dzaima/APL]] since 2020-03-01}} | ||
In [[dzaima/APL]] the [[dyadic]] form of Depth is not yet implemented, so this definition will only work for [[monadic function]] application | In [[dzaima/APL]] the [[dyadic]] form of Depth is not yet implemented, so this definition will only work for [[monadic function]] application | ||
Line 26: | Line 26: | ||
⍺ ∇¨⍵ ⍝ (⍺ or) ⍵ deeper: recursive traversal. | ⍺ ∇¨⍵ ⍝ (⍺ or) ⍵ deeper: recursive traversal. | ||
} | } | ||
</ | </syntaxhighlight> | ||
{{Works in|[[Dyalog APL]]}} | {{Works in|[[Dyalog APL]]}} | ||
In all dialects that support user defined [[tradop]]s, the operator for monadic function application can be defined as: | In all dialects that support user defined [[tradop]]s, the operator for monadic function application can be defined as: | ||
Line 35: | Line 35: | ||
→0 | →0 | ||
APPLY:R←f Y | APPLY:R←f Y | ||
</ | </syntaxhighlight> | ||
{{Works in|[[APL2]], [[APLX]], [[GNU APL]], [[Dyalog APL]]}} | {{Works in|[[APL2]], [[APLX]], [[GNU APL]], [[Dyalog APL]]}} | ||