Scalar function: Difference between revisions

Jump to navigation Jump to search
1,129 bytes added ,  23:46, 31 March 2020
no edit summary
No edit summary
Line 3: Line 3:
Only a particular [[valence]] of a function is labelled "scalar". The scalar monad [[Not]] usually shares the glyph <source lang=apl inline>~</source> with non-scalar dyad [[Without]], and similarly scalar [[Roll]] and non-scalar [[Deal]] are both written <source lang=apl inline>?</source>.
Only a particular [[valence]] of a function is labelled "scalar". The scalar monad [[Not]] usually shares the glyph <source lang=apl inline>~</source> with non-scalar dyad [[Without]], and similarly scalar [[Roll]] and non-scalar [[Deal]] are both written <source lang=apl inline>?</source>.


== User defined scalar functions ==
In dialects with the [[Over]] operator (<source lang=apl inline>⍥</source>), any function can be used as a scalar function (that is, be applied to all simple scalars) using the [[derived monadic operator]] <source lang=apl inline>perv←⍥0</source>. In dialects that support [[dfn]]s, this operator can be defined<ref>[[John Scholes]], [https://dfns.dyalog.com/n_perv.htm perv] (Scalar pervasion). dfns workspace, 2019-02-17.</ref> as:
<source lang=apl>
perv←{⍺←⊢              ⍝ Scalar pervasion
    1=≡⍺ ⍵ ⍵:⍺ ⍺⍺ ⍵    ⍝ (⍺ and) ⍵ depth 0: operand fn application
            ⍺ ∇¨⍵      ⍝ (⍺ or) ⍵ deeper: recursive traversal.
}
</source>
== Standard scalar functions ==
== Standard scalar functions ==


Line 80: Line 72:
|-
|-
|}
|}
== User defined scalar functions ==
In [[nested array model]] dialects with the [[Depth (operator)|Depth]] operator (<source lang=apl inline>⍥</source> or in J, ''Level at'' <source lang=j inline>L:</source> ), any function can be used as a scalar function (that is, be applied to all simple scalars) using the [[derived monadic operator]] <source lang=apl inline>perv←⍥0</source>:
[https://tio.run/##SyzI0U2pTMzJT9dNrShJzUtJTfn/qKPtUduE6kd9U4HUo56mlMzigke9u2ofdbcAxYJdgUR4sLprWWpeibqGenBqcXFmfl5AUSaQq6AO1KyuyfWoo70CqNk5PyVVoeJ/QWpRGcio3qUGXH75ecHJiTmJRW55YEt6t1qpA/UBzVZQT1OvRZZXAOlT0DBQMNRUMFTQeNTVZKhgoAl0XjsXyOBHvWv@AwA Try it online!]


<source lang=apl>
      perv←⍥0
      NonScalarFn←{⍵:'t' ⋄ 'f'}
      NonScalarFn perv (0 1) 1 (⊂1 0)
┌──┬─┬────┐
│ft│t│┌──┐│
│  │ ││tf││
│  │ │└──┘│
└──┴─┴────┘
</source>
{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]]}}
In dialects that support [[dfn]]s, this operator can be defined<ref>[[John Scholes]], [https://dfns.dyalog.com/n_perv.htm perv] (Scalar pervasion). dfns workspace, 2019-02-17.</ref> as:
<!-- [https://tio.run/##VZGxTsMwEIb3PMVtlwygZo3EVJURIWVAjFbsQKTItpwQFaEuCCUhKKgLIwOwMLB26cij@EXSc6IIasn23e@77@wz0/kJv2e5uhlsW9t6@2Bf32jjWaFtv7fdFzoTSV1eI09lgRv78kRuvKLlKsZVJWSJPsaiKDIlL01GLiDRMPBs26yJtlRcwHrQwlRjCQLXW9t9wvGw/TvECcuZARfKHM9zB@GZff6gLIrYuRlN9n6W5mTfCUzyYFS50OUtLCJQRCMVUglM6zxLWDmT/9UmVNv8fs@8P6AyM08QKAIjkjtTZJWA0rBKmILlp97Gu1Byuvy5nB65i5A6Qd0CTPHofHwe@AsIAwipSPcYwiKgH2g81yrb/wwH Try it online!] -->
<source lang=apl>
perv←{⍺←⊢              ⍝ Scalar pervasion
    1=≡⍺ ⍵ ⍵:⍺ ⍺⍺ ⍵    ⍝ (⍺ and) ⍵ depth 0: operand fn application
            ⍺ ∇¨⍵      ⍝ (⍺ or) ⍵ deeper: recursive traversal.
}
</source>
{{Works in|[[Dyalog APL]]}}
== External links ==
== External links ==


Navigation menu