Extended Dyalog APL: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(6 intermediate revisions by one other user not shown)
Line 10: Line 10:
| developer                = [[Adám Brudzewsky]]
| developer                = [[Adám Brudzewsky]]
| implementation language  = [[Dyalog APL]]
| implementation language  = [[Dyalog APL]]
| source                  = [https://github.com/abrudz/dyalog-apl-extended GitHub]
| platforms                = [[Dyalog APL]]
| documentation            = [https://github.com/abrudz/dyalog-apl-extended/blob/master/README.md README]
| documentation            = [https://github.com/abrudz/dyalog-apl-extended/blob/master/README.md README]
| license                  = [[wikipedia:MIT License|MIT]]
| license                  = [[wikipedia:MIT License|MIT]]
| influenced by            = [[J]]
| influenced by            = [[J]]
| influenced              = [[dzaima/APL]], [[BQN]]
| influenced              = [[Dyalog APL]], [[dzaima/APL]], [[BQN]], [[Dyalog APL Vision]]
| run online              = [https://tio.run/#apl-dyalog-extended TIO]
| run online              = [https://tio.run/#apl-dyalog-extended TIO]
}}
}}
'''Extended Dyalog APL''' features extended domains of existing [[primitive]]s and [[quad name]]s and adds a few new ones to [[Dyalog APL]].
'''Extended Dyalog APL''' features extended domains of existing [[primitive]]s and [[quad name]]s and adds a few new ones to [[Dyalog APL]].
It was an experimental project that is no longer maintained. Quoting from project README.md:
It was an experimental project that is no longer maintained. Quoting from project README.md:
<blockquote>This project serves as a breeding ground for ideas. While some have been adopted into Dyalog APL proper, it is unlikely that many will be. Furthermore, Dyalog 18.0 gave a different meaning to monadic ≠ than proposed here, leaving Extended Dyalog APL as a deadend.</blockquote>
<blockquote>This project serves as a breeding ground for ideas. While some have been adopted into Dyalog APL proper, it is unlikely that many will be. Furthermore, Dyalog 18.0 gave a different meaning to monadic <code></code> than proposed here, leaving Extended Dyalog APL as a deadend.</blockquote>
The role of Extended Dyalog APL as breeding ground for ideas was followed [[Dyalog APL Vision]], also by [[Adám Brudzewsky]].
== Influence ==
Many of the extensions have been adopted into [[dzaima/APL]], while Dyalog APL added [[Constant]] (<syntaxhighlight lang=apl inline>⍨</syntaxhighlight>) and introduced non-experimental [[Case Convert|case conversion]] as a <syntaxhighlight lang=apl inline>⎕C</syntaxhighlight> [[function]] rather than the proposed [[operator]]. Dyalog is also planning to add [[Reverse Compose]], [[From]], and [[Depth (operator)|Depth]].


== Features ==
== Features ==
Line 25: Line 30:
| Name || Glyph || Type* || Extension
| Name || Glyph || Type* || Extension
|-
|-
| Back Slash || <source lang=apl inline>\</source> || 🔶 || <source lang=apl inline>∘.f</source>when dyadic, allows short and/or multiple left args
| Back Slash || <syntaxhighlight lang=apl inline>\</syntaxhighlight> || 🔶 || <syntaxhighlight lang=apl inline>∘.f</syntaxhighlight>when dyadic, allows short and/or multiple left args
|-
|-
| Back Slash Bar || <source lang=apl inline>⍀</source> || 🔶 || <source lang=apl inline>⊢∘f</source>when dyadic, allows short and/or multiple left args
| Back Slash Bar || <syntaxhighlight lang=apl inline>⍀</syntaxhighlight> || 🔶 || <syntaxhighlight lang=apl inline>⊢∘f</syntaxhighlight>when dyadic, allows short and/or multiple left args
|-
|-
| Bullet || <source lang=apl inline>∙</source> || 🔺 || Inner product and Alternant
| Bullet || <syntaxhighlight lang=apl inline>∙</syntaxhighlight> || 🔺 || Inner product and Alternant
|-
|-
| Circle Diaeresis || <source lang=apl inline>⍥</source> || 🔺 || Over and Depth
| Circle Diaeresis || <syntaxhighlight lang=apl inline>⍥</syntaxhighlight> || 🔺 || Over and Depth
|-
|-
| Circle Jot || <source lang=apl inline>⌾</source> || 🔺 || Complex/Imaginary
| Circle Jot || <syntaxhighlight lang=apl inline>⌾</syntaxhighlight> || 🔺 || Complex/Imaginary
|-
|-
| Del Diaeresis || <source lang=apl inline>⍢</source> || 🔺 || Under (a.k.a. Dual)
| Del Diaeresis || <syntaxhighlight lang=apl inline>⍢</syntaxhighlight> || 🔺 || Under (a.k.a. Dual)
|-
|-
| Del Tilde || <source lang=apl inline>⍫</source> || 🔺 || Obverse;<source lang=apl inline>⍺⍺</source>but with inverse<source lang=apl inline>⍵⍵</source>
| Del Tilde || <syntaxhighlight lang=apl inline>⍫</syntaxhighlight> || 🔺 || Obverse;<syntaxhighlight lang=apl inline>⍺⍺</syntaxhighlight>but with inverse<syntaxhighlight lang=apl inline>⍵⍵</syntaxhighlight>
|-
|-
| Diaeresis || <source lang=apl inline>¨</source> || 🔵 || allows constant operand
| Diaeresis || <syntaxhighlight lang=apl inline>¨</syntaxhighlight> || 🔵 || allows constant operand
|-
|-
| Divide || <source lang=apl inline>÷</source> || 🔵 || monadic converts letters to title case when possible
| Divide || <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || 🔵 || monadic converts letters to title case when possible
|-
|-
| Dollar Sign || <source lang=apl inline>$</source> || 🔺 || string enhancement <code>${1}</code>:<source lang=apl inline>1⊃⍺</source>, <code>${expr}</code>:<source lang=apl inline>⍎expr</source>,<source lang=apl inline>\n</source>:JSON
| Dollar Sign || <syntaxhighlight lang=apl inline>$</syntaxhighlight> || 🔺 || string enhancement <code>${1}</code>:<syntaxhighlight lang=apl inline>1⊃⍺</syntaxhighlight>, <code>${expr}</code>:<syntaxhighlight lang=apl inline>⍎expr</syntaxhighlight>,<syntaxhighlight lang=apl inline>\n</syntaxhighlight>:JSON
|-
|-
| Down Arrow || <source lang=apl inline>↓</source> || 🔵 || allows long<source lang=apl inline>⍺</source>
| Down Arrow || <syntaxhighlight lang=apl inline>↓</syntaxhighlight> || 🔵 || allows long<syntaxhighlight lang=apl inline>⍺</syntaxhighlight>
|-
|-
| Down Shoe || <source lang=apl inline>∪</source> || 🔵 || allows rank>1
| Down Shoe || <syntaxhighlight lang=apl inline>∪</syntaxhighlight> || 🔵 || allows rank>1
|-
|-
| Downstile || <source lang=apl inline>⌊</source> || 🔵 || monadic lowercases letters
| Downstile || <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || 🔵 || monadic lowercases letters
|-
|-
| Down Tack || <source lang=apl inline>⊤</source> || 🔶 || 2s as default left argument
| Down Tack || <syntaxhighlight lang=apl inline>⊤</syntaxhighlight> || 🔶 || 2s as default left argument
|-
|-
| Ellipsis || <source lang=apl inline>…</source> || 🔺 || fill sequence gaps ([[dfns workspace]]'s<source lang=apl inline>to⍤1</source>
| Ellipsis || <syntaxhighlight lang=apl inline>…</syntaxhighlight> || 🔺 || fill sequence gaps ([[dfns workspace]]'s<syntaxhighlight lang=apl inline>to⍤1</syntaxhighlight>
|-
|-
| Epsilon Underbar || <source lang=apl inline>⍷</source> || 🔶 || monadic is Type<source lang=apl inline>∊</source>with<source lang=apl inline>⎕ML←0</source>
| Epsilon Underbar || <syntaxhighlight lang=apl inline>⍷</syntaxhighlight> || 🔶 || monadic is Type<syntaxhighlight lang=apl inline>∊</syntaxhighlight>with<syntaxhighlight lang=apl inline>⎕ML←0</syntaxhighlight>
|-
|-
| Equals || <source lang=apl inline>=</source> || 🔶 || with [[TAO]]; monad: is-type
| Equals || <syntaxhighlight lang=apl inline>=</syntaxhighlight> || 🔶 || with [[TAO]]; monad: is-type
|-
|-
| Greater Than || <source lang=apl inline>></source> || 🔶 || with TAO; monad: is-strictly-negative/is-visible
| Greater Than || <syntaxhighlight lang=apl inline>></syntaxhighlight> || 🔶 || with TAO; monad: is-strictly-negative/is-visible
|-
|-
| Greater Than Or Equal To || <source lang=apl inline>≥</source> || 🔶 || with TAO; monad: is non-positive/is-not-control-character
| Greater Than Or Equal To || <syntaxhighlight lang=apl inline>≥</syntaxhighlight> || 🔶 || with TAO; monad: is non-positive/is-not-control-character
|-
|-
| house || <source lang=apl inline>⌂</source> || 🔺 || prefix for contents of [[dfns workspace]]
| house || <syntaxhighlight lang=apl inline>⌂</syntaxhighlight> || 🔺 || prefix for contents of [[dfns workspace]]
|-
|-
| infinity || <source lang=apl inline>∞</source> || 🔺 || largest integer (for use with<source lang=apl inline>⍤</source>and<source lang=apl inline>⍣</source>)
| infinity || <syntaxhighlight lang=apl inline>∞</syntaxhighlight> || 🔺 || largest integer (for use with<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>and<syntaxhighlight lang=apl inline>⍣</syntaxhighlight>)
|-
|-
| Iota || <source lang=apl inline>⍳</source> || 🔵 || Unicode version of [[dfns workspace]]'s <source lang=apl inline>iotag</source>
| Iota || <syntaxhighlight lang=apl inline>⍳</syntaxhighlight> || 🔵 || Unicode version of [[dfns workspace]]'s <syntaxhighlight lang=apl inline>iotag</syntaxhighlight>
|-
|-
| Iota Underbar || <source lang=apl inline>⍸</source> || 🔵 || allows duplicates/non-Booleans
| Iota Underbar || <syntaxhighlight lang=apl inline>⍸</syntaxhighlight> || 🔵 || allows duplicates/non-Booleans
|-
|-
| Iota Underbar Inverse || <source lang=apl inline>⍸⍣¯1</source> || 🔵 || given<source lang=apl inline>r</source>, finds<source lang=apl inline>n</source>so that<source lang=apl inline>r≡⍸n</source>
| Iota Underbar Inverse || <syntaxhighlight lang=apl inline>⍸⍣¯1</syntaxhighlight> || 🔵 || given<syntaxhighlight lang=apl inline>r</syntaxhighlight>, finds<syntaxhighlight lang=apl inline>n</syntaxhighlight>so that<syntaxhighlight lang=apl inline>r≡⍸n</syntaxhighlight>
|-
|-
| Jot Diaeresis || <source lang=apl inline>⍤</source> || 🔵 || allows constant left operand, Atop with function right operand
| Jot Diaeresis || <syntaxhighlight lang=apl inline>⍤</syntaxhighlight> || 🔵 || allows constant left operand, Atop with function right operand
|-
|-
| Jot Underbar || <source lang=apl inline>⍛</source> || 🔺 || reverse composition<source lang=apl inline>X f⍛g Y</source>is<source lang=apl inline>(f X) g Y</source>
| Jot Underbar || <syntaxhighlight lang=apl inline>⍛</syntaxhighlight> || 🔺 || reverse composition<syntaxhighlight lang=apl inline>X f⍛g Y</syntaxhighlight>is<syntaxhighlight lang=apl inline>(f X) g Y</syntaxhighlight>
|-
|-
| Left Shoe || <source lang=apl inline>⊂</source> || 🔵 || allows partitioning along multiple trailing axes, with short <source lang=apl inline>⍺</source>s, and inserting/appending empty partitions
| Left Shoe || <syntaxhighlight lang=apl inline>⊂</syntaxhighlight> || 🔵 || allows partitioning along multiple trailing axes, with short <syntaxhighlight lang=apl inline>⍺</syntaxhighlight>s, and inserting/appending empty partitions
|-
|-
| Left Shoe Stile || <source lang=apl inline>⍧</source> || 🔺 || monad: nub-sieve; dyad: count-in
| Left Shoe Stile || <syntaxhighlight lang=apl inline>⍧</syntaxhighlight> || 🔺 || monad: nub-sieve; dyad: count-in
|-
|-
| Left Shoe With Axis || <source lang=apl inline>⊂[k]</source> || 🔵 || as<source lang=apl inline>⊂</source>, but called with left operand
| Left Shoe With Axis || <syntaxhighlight lang=apl inline>⊂[k]</syntaxhighlight> || 🔵 || as<syntaxhighlight lang=apl inline>⊂</syntaxhighlight>, but called with left operand
|-
|-
| Less Than || <source lang=apl inline><</source> || 🔶 || with TAO; monad: is-strictly-positive/is-control-character
| Less Than || <syntaxhighlight lang=apl inline><</syntaxhighlight> || 🔶 || with TAO; monad: is-strictly-positive/is-control-character
|-
|-
| Less Than Or Equal To || <source lang=apl inline>≤</source> || 🔶 || with TAO ; monad: is-non-negative/is-invisible
| Less Than Or Equal To || <syntaxhighlight lang=apl inline>≤</syntaxhighlight> || 🔶 || with TAO ; monad: is-non-negative/is-invisible
|-
|-
| Minus || <source lang=apl inline>-</source> || 🔵 || monadic flips letter case
| Minus || <syntaxhighlight lang=apl inline>-</syntaxhighlight> || 🔵 || monadic flips letter case
|-
|-
| macron || <source lang=apl inline>¯</source> || 🔵 || as prefix to name or primitive means its inverse
| macron || <syntaxhighlight lang=apl inline>¯</syntaxhighlight> || 🔵 || as prefix to name or primitive means its inverse
|-
|-
| negative Infinity || <source lang=apl inline>¯∞</source> || 🔺 || smallest integer (for use with<source lang=apl inline>⍣</source>)
| negative Infinity || <syntaxhighlight lang=apl inline>¯∞</syntaxhighlight> || 🔺 || smallest integer (for use with<syntaxhighlight lang=apl inline>⍣</syntaxhighlight>)
|-
|-
| Nand || <source lang=apl inline>⍲</source> || 🔶 || monad: not all equal to type
| Nand || <syntaxhighlight lang=apl inline>⍲</syntaxhighlight> || 🔶 || monad: not all equal to type
|-
|-
| Nor || <source lang=apl inline>⍱</source> || 🔶 || monad: not any equal to type
| Nor || <syntaxhighlight lang=apl inline>⍱</syntaxhighlight> || 🔶 || monad: not any equal to type
|-
|-
| Not Equal To || <source lang=apl inline>≠</source> || 🔶 || with TAO; monad: is-non-type
| Not Equal To || <syntaxhighlight lang=apl inline>≠</syntaxhighlight> || 🔶 || with TAO; monad: is-non-type
|-
|-
| Percent || <source lang=apl inline>%</source> || 🔺 || <source lang=apl inline>f%</source>and<source lang=apl inline>A%</source>: probability-logical function (mapping arrays)
| Percent || <syntaxhighlight lang=apl inline>%</syntaxhighlight> || 🔺 || <syntaxhighlight lang=apl inline>f%</syntaxhighlight>and<syntaxhighlight lang=apl inline>A%</syntaxhighlight>: probability-logical function (mapping arrays)
|-
|-
| Quad Diamond || <source lang=apl inline>⌺</source> || 🔶 || auto-extended<source lang=apl inline>⍵⍵</source>, allows small<source lang=apl inline>⍵</source>, optional edge spec(s) (0:Zero; 1:Repl; 2:Rev; 3:Mirror; 4:Wrap; -:Twist) with masks as operand's<source lang=apl inline>⍺</source>
| Quad Diamond || <syntaxhighlight lang=apl inline>⌺</syntaxhighlight> || 🔶 || auto-extended<syntaxhighlight lang=apl inline>⍵⍵</syntaxhighlight>, allows small<syntaxhighlight lang=apl inline>⍵</syntaxhighlight>, optional edge spec(s) (0:Zero; 1:Repl; 2:Rev; 3:Mirror; 4:Wrap; -:Twist) with masks as operand's<syntaxhighlight lang=apl inline>⍺</syntaxhighlight>
|-
|-
| Question Mark || <source lang=apl inline>?</source> || 🔵 || <source lang=apl inline>⍺?¯⍵</source>as norm dist stddev <source lang=apl inline>⍵</source>and optional mean<source lang=apl inline>⍺←0</source>
| Question Mark || <syntaxhighlight lang=apl inline>?</syntaxhighlight> || 🔵 || <syntaxhighlight lang=apl inline>⍺?¯⍵</syntaxhighlight>as norm dist stddev <syntaxhighlight lang=apl inline>⍵</syntaxhighlight>and optional mean<syntaxhighlight lang=apl inline>⍺←0</syntaxhighlight>
|-
|-
| Rho || <source lang=apl inline>⍴</source> || 🔵 || allows omitting one dimension length with<source lang=apl inline>¯1</source>
| Rho || <syntaxhighlight lang=apl inline>⍴</syntaxhighlight> || 🔵 || allows omitting one dimension length with<syntaxhighlight lang=apl inline>¯1</syntaxhighlight>
|-
|-
| Right Shoe Underbar || <source lang=apl inline>⊇</source> || 🔺 || monadic discloses if scalar, dyadic indexes sanely
| Right Shoe Underbar || <syntaxhighlight lang=apl inline>⊇</syntaxhighlight> || 🔺 || monadic discloses if scalar, dyadic indexes sanely
|-
|-
| Right Shoe Underbar With Axis || <source lang=apl inline>⊇[k]</source> || 🔺 || as above, but called with left operand
| Right Shoe Underbar With Axis || <syntaxhighlight lang=apl inline>⊇[k]</syntaxhighlight> || 🔺 || as above, but called with left operand
|-
|-
| Root || <source lang=apl inline>√</source> || 🔺 || (Square) Root
| Root || <syntaxhighlight lang=apl inline>√</syntaxhighlight> || 🔺 || (Square) Root
|-
|-
| Semicolon Underbar || <source lang=apl inline>⍮</source> || 🔺 || (Half) Pair; use<source lang=apl inline>↑⍤⍮</source>to add axis
| Semicolon Underbar || <syntaxhighlight lang=apl inline>⍮</syntaxhighlight> || 🔺 || (Half) Pair; use<syntaxhighlight lang=apl inline>↑⍤⍮</syntaxhighlight>to add axis
|-
|-
| Slash || <source lang=apl inline>/</source> || 🔵 || allows short and/or multiple left args
| Slash || <syntaxhighlight lang=apl inline>/</syntaxhighlight> || 🔵 || allows short and/or multiple left args
|-
|-
| Slash Bar || <source lang=apl inline>⌿</source> || 🔵 || allows short and/or multiple left args
| Slash Bar || <syntaxhighlight lang=apl inline>⌿</syntaxhighlight> || 🔵 || allows short and/or multiple left args
|-
|-
| Star Diaeresis || <source lang=apl inline>⍣</source> || 🔵 || allows non-scalar right operand incl.<source lang=apl inline>∞</source>and<source lang=apl inline>¯∞</source>and array left operand
| Star Diaeresis || <syntaxhighlight lang=apl inline>⍣</syntaxhighlight> || 🔵 || allows non-scalar right operand incl.<syntaxhighlight lang=apl inline>∞</syntaxhighlight>and<syntaxhighlight lang=apl inline>¯∞</syntaxhighlight>and array left operand
|-
|-
| Stile || <source lang=apl inline>|</source> || 🔵 || monadic normalises letters to lowercase (upper then lower)
| Stile || <syntaxhighlight lang=apl inline>|</syntaxhighlight> || 🔵 || monadic normalises letters to lowercase (upper then lower)
|-
|-
| Stile Tilde || <source lang=apl inline>⍭</source> || 🔺 || monadic is factors; dyadic depends on<source lang=apl inline>⍺</source>: 0=non-prime?, 1=prime?, ¯1=primes less than<source lang=apl inline>⍵</source>, ¯2=<source lang=apl inline>⍵</source>th prime, 4=next prime, ¯4=prev prime
| Stile Tilde || <syntaxhighlight lang=apl inline>⍭</syntaxhighlight> || 🔺 || monadic is factors; dyadic depends on<syntaxhighlight lang=apl inline>⍺</syntaxhighlight>: 0=non-prime?, 1=prime?, ¯1=primes less than<syntaxhighlight lang=apl inline>⍵</syntaxhighlight>, ¯2=<syntaxhighlight lang=apl inline>⍵</syntaxhighlight>th prime, 4=next prime, ¯4=prev prime
|-
|-
| Tilde || <source lang=apl inline>~</source> || 🔵 || monadic allows probabilities, dyadic allows rank>1
| Tilde || <syntaxhighlight lang=apl inline>~</syntaxhighlight> || 🔵 || monadic allows probabilities, dyadic allows rank>1
|-
|-
| Tilde Diaeresis || <source lang=apl inline>⍨</source> || 🔵 || allows constant operand
| Tilde Diaeresis || <syntaxhighlight lang=apl inline>⍨</syntaxhighlight> || 🔵 || allows constant operand
|-
|-
| Times || <source lang=apl inline>×</source> || 🔵 || set/query letter case (lower:<source lang=apl inline>¯1</source>, title:<source lang=apl inline>0</source>, upper:<source lang=apl inline>1</source>)
| Times || <syntaxhighlight lang=apl inline>×</syntaxhighlight> || 🔵 || set/query letter case (lower:<syntaxhighlight lang=apl inline>¯1</syntaxhighlight>, title:<syntaxhighlight lang=apl inline>0</syntaxhighlight>, upper:<syntaxhighlight lang=apl inline>1</syntaxhighlight>)
|-
|-
| Up Arrow || <source lang=apl inline>↑</source> || 🔵 || allows long<source lang=apl inline>⍺</source>
| Up Arrow || <syntaxhighlight lang=apl inline>↑</syntaxhighlight> || 🔵 || allows long<syntaxhighlight lang=apl inline>⍺</syntaxhighlight>
|-
|-
| Up Shoe || <source lang=apl inline>∩</source> || 🔶 || monadic is self-classify; dyadic allows rank>1
| Up Shoe || <syntaxhighlight lang=apl inline>∩</syntaxhighlight> || 🔶 || monadic is self-classify; dyadic allows rank>1
|-
|-
| Upstile || <source lang=apl inline>⌈</source> || 🔵 || monadic uppercases letters
| Upstile || <syntaxhighlight lang=apl inline>⌈</syntaxhighlight> || 🔵 || monadic uppercases letters
|-
|-
| Up Tack || <source lang=apl inline>⊥</source> || 🔶 || 2 as default left argument
| Up Tack || <syntaxhighlight lang=apl inline>⊥</syntaxhighlight> || 🔶 || 2 as default left argument
|-
|-
| Vel || <source lang=apl inline>∨</source> || 🔶 || monadic is Descending Sort
| Vel || <syntaxhighlight lang=apl inline>∨</syntaxhighlight> || 🔶 || monadic is [[Descending Sort]]
|-
|-
| Wedge || <source lang=apl inline>∧</source> || 🔶 || monadic is Ascending Sort
| Wedge || <syntaxhighlight lang=apl inline>∧</syntaxhighlight> || 🔶 || monadic is [[Ascending Sort]]
|-
|-
| Case Convert || <source lang=apl inline>⎕C</source> || 🔺 || <source lang=apl inline>fn ⎕C</source>applies case-insensitively,<source lang=apl inline>array ⎕C</source>case-folds
| Case Convert || <syntaxhighlight lang=apl inline>⎕C</syntaxhighlight> || 🔺 || <syntaxhighlight lang=apl inline>fn ⎕C</syntaxhighlight>applies case-insensitively,<syntaxhighlight lang=apl inline>array ⎕C</syntaxhighlight>case-folds
|-
|-
| Error Message || <source lang=apl inline>⎕EM</source> || 🔺 || Self-inverse<source lang=apl inline>⎕EM</source>
| Error Message || <syntaxhighlight lang=apl inline>⎕EM</syntaxhighlight> || 🔺 || Self-inverse<syntaxhighlight lang=apl inline>⎕EM</syntaxhighlight>
|-
|-
| Namespace || <source lang=apl inline>⎕NS</source> || 🔵 || allows<source lang=apl inline>⎕NS names values</source>(tries to resolve<source lang=apl inline>⎕OR</source>s)
| Namespace || <syntaxhighlight lang=apl inline>⎕NS</syntaxhighlight> || 🔵 || allows<syntaxhighlight lang=apl inline>⎕NS names values</syntaxhighlight>(tries to resolve<syntaxhighlight lang=apl inline>⎕OR</syntaxhighlight>s)
|-
|-
| Namespace inverse || <source lang=apl inline>⎕NS⍣¯1</source> || 🔺 || allows<source lang=apl inline>(names values)←⎕NS⍣¯1⊢ns</source>(returns<source lang=apl inline>⎕OR</source>s for ns/fns)
| Namespace inverse || <syntaxhighlight lang=apl inline>⎕NS⍣¯1</syntaxhighlight> || 🔺 || allows<syntaxhighlight lang=apl inline>(names values)←⎕NS⍣¯1⊢ns</syntaxhighlight>(returns<syntaxhighlight lang=apl inline>⎕OR</syntaxhighlight>s for ns/fns)
|-
|-
| Unicode Convert || <source lang=apl inline>⎕UCS</source> || 🔵 || scalar when monadic
| Unicode Convert || <syntaxhighlight lang=apl inline>⎕UCS</syntaxhighlight> || 🔵 || scalar when monadic
|}
|}
<nowiki>*</nowiki> 🔺 means new feature 🔶 means added valence 🔵 means expanded domain
<nowiki>*</nowiki> 🔺 means new feature 🔶 means added valence 🔵 means expanded domain


{{APL dialects}}[[Category:APL dialects]][[Category:Nested array languages]][[Category:Leading axis languages]][[Category:Languages with tacit programming]]
{{APL dialects}}[[Category:APL dialects]][[Category:Nested array languages]][[Category:Leading axis languages]][[Category:Languages with tacit programming]]

Latest revision as of 15:08, 6 March 2024

Extended Dyalog APL features extended domains of existing primitives and quad names and adds a few new ones to Dyalog APL. It was an experimental project that is no longer maintained. Quoting from project README.md:

This project serves as a breeding ground for ideas. While some have been adopted into Dyalog APL proper, it is unlikely that many will be. Furthermore, Dyalog 18.0 gave a different meaning to monadic than proposed here, leaving Extended Dyalog APL as a deadend.

The role of Extended Dyalog APL as breeding ground for ideas was followed Dyalog APL Vision, also by Adám Brudzewsky.

Influence

Many of the extensions have been adopted into dzaima/APL, while Dyalog APL added Constant () and introduced non-experimental case conversion as a ⎕C function rather than the proposed operator. Dyalog is also planning to add Reverse Compose, From, and Depth.

Features

The following extensions were made:

Name Glyph Type* Extension
Back Slash \ 🔶 ∘.fwhen dyadic, allows short and/or multiple left args
Back Slash Bar 🔶 ⊢∘fwhen dyadic, allows short and/or multiple left args
Bullet 🔺 Inner product and Alternant
Circle Diaeresis 🔺 Over and Depth
Circle Jot 🔺 Complex/Imaginary
Del Diaeresis 🔺 Under (a.k.a. Dual)
Del Tilde 🔺 Obverse;⍺⍺but with inverse⍵⍵
Diaeresis ¨ 🔵 allows constant operand
Divide ÷ 🔵 monadic converts letters to title case when possible
Dollar Sign $ 🔺 string enhancement ${1}:1⊃⍺, ${expr}:⍎expr,\n:JSON
Down Arrow 🔵 allows long
Down Shoe 🔵 allows rank>1
Downstile 🔵 monadic lowercases letters
Down Tack 🔶 2s as default left argument
Ellipsis 🔺 fill sequence gaps (dfns workspace'sto⍤1
Epsilon Underbar 🔶 monadic is Typewith⎕ML←0
Equals = 🔶 with TAO; monad: is-type
Greater Than > 🔶 with TAO; monad: is-strictly-negative/is-visible
Greater Than Or Equal To 🔶 with TAO; monad: is non-positive/is-not-control-character
house 🔺 prefix for contents of dfns workspace
infinity 🔺 largest integer (for use withand)
Iota 🔵 Unicode version of dfns workspace's iotag
Iota Underbar 🔵 allows duplicates/non-Booleans
Iota Underbar Inverse ⍸⍣¯1 🔵 givenr, findsnso thatr≡⍸n
Jot Diaeresis 🔵 allows constant left operand, Atop with function right operand
Jot Underbar 🔺 reverse compositionX f⍛g Yis(f X) g Y
Left Shoe 🔵 allows partitioning along multiple trailing axes, with short s, and inserting/appending empty partitions
Left Shoe Stile 🔺 monad: nub-sieve; dyad: count-in
Left Shoe With Axis ⊂[k] 🔵 as, but called with left operand
Less Than < 🔶 with TAO; monad: is-strictly-positive/is-control-character
Less Than Or Equal To 🔶 with TAO ; monad: is-non-negative/is-invisible
Minus - 🔵 monadic flips letter case
macron ¯ 🔵 as prefix to name or primitive means its inverse
negative Infinity ¯∞ 🔺 smallest integer (for use with)
Nand 🔶 monad: not all equal to type
Nor 🔶 monad: not any equal to type
Not Equal To 🔶 with TAO; monad: is-non-type
Percent % 🔺 f%andA%: probability-logical function (mapping arrays)
Quad Diamond 🔶 auto-extended⍵⍵, allows small, optional edge spec(s) (0:Zero; 1:Repl; 2:Rev; 3:Mirror; 4:Wrap; -:Twist) with masks as operand's
Question Mark ? 🔵 ⍺?¯⍵as norm dist stddev and optional mean⍺←0
Rho 🔵 allows omitting one dimension length with¯1
Right Shoe Underbar 🔺 monadic discloses if scalar, dyadic indexes sanely
Right Shoe Underbar With Axis ⊇[k] 🔺 as above, but called with left operand
Root 🔺 (Square) Root
Semicolon Underbar 🔺 (Half) Pair; use↑⍤⍮to add axis
Slash / 🔵 allows short and/or multiple left args
Slash Bar 🔵 allows short and/or multiple left args
Star Diaeresis 🔵 allows non-scalar right operand incl.and¯∞and array left operand
Stile | 🔵 monadic normalises letters to lowercase (upper then lower)
Stile Tilde 🔺 monadic is factors; dyadic depends on: 0=non-prime?, 1=prime?, ¯1=primes less than, ¯2=th prime, 4=next prime, ¯4=prev prime
Tilde ~ 🔵 monadic allows probabilities, dyadic allows rank>1
Tilde Diaeresis 🔵 allows constant operand
Times × 🔵 set/query letter case (lower:¯1, title:0, upper:1)
Up Arrow 🔵 allows long
Up Shoe 🔶 monadic is self-classify; dyadic allows rank>1
Upstile 🔵 monadic uppercases letters
Up Tack 🔶 2 as default left argument
Vel 🔶 monadic is Descending Sort
Wedge 🔶 monadic is Ascending Sort
Case Convert ⎕C 🔺 fn ⎕Capplies case-insensitively,array ⎕Ccase-folds
Error Message ⎕EM 🔺 Self-inverse⎕EM
Namespace ⎕NS 🔵 allows⎕NS names values(tries to resolve⎕ORs)
Namespace inverse ⎕NS⍣¯1 🔺 allows(names values)←⎕NS⍣¯1⊢ns(returns⎕ORs for ns/fns)
Unicode Convert ⎕UCS 🔵 scalar when monadic

* 🔺 means new feature 🔶 means added valence 🔵 means expanded domain


APL dialects [edit]
Maintained APL+WinAPL2APL64APL\ivApletteAprilCo-dfnsDyalog APLDyalog APL Visiondzaima/APLGNU APLKapNARS2000Pometo
Historical A Programming LanguageA+ (A) ∙ APL#APL2CAPL\360APL/700APL\1130APL\3000APL.68000APL*PLUSAPL.jlAPL.SVAPLXExtended Dyalog APLIverson notationIVSYS/7090NARSngn/aplopenAPLOperators and FunctionsPATRowanSAXSHARP APLRationalized APLVisualAPL (APLNext) ∙ VS APLYork APL
Derivatives AHPLBQNCoSyELIGleeIIvyJJellyK (Goal, Klong, Q) ∙ KamilaLispLang5LilNialRADUiua
Overviews Comparison of APL dialectsTimeline of array languagesTimeline of influential array languagesFamily tree of array languages