Extended Dyalog APL: Difference between revisions

Jump to navigation Jump to search
no edit summary
(Add note explaining that the Extended Dyalog is archived and cannot be easily used in Dyalog APL.)
No edit summary
 
(8 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 primitives/quad-names 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 <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]].


''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.''
== Features ==
The following extensions were made:
{| class=wikitable
| Name || Glyph || Type* || Extension
|-
| 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 || <syntaxhighlight lang=apl inline>⍀</syntaxhighlight> || 🔶 || <syntaxhighlight lang=apl inline>⊢∘f</syntaxhighlight>when dyadic, allows short and/or multiple left args
|-
| Bullet || <syntaxhighlight lang=apl inline>∙</syntaxhighlight> || 🔺 || Inner product and Alternant
|-
| Circle Diaeresis || <syntaxhighlight lang=apl inline>⍥</syntaxhighlight> || 🔺 || Over and Depth
|-
| Circle Jot || <syntaxhighlight lang=apl inline>⌾</syntaxhighlight> || 🔺 || Complex/Imaginary
|-
| Del Diaeresis || <syntaxhighlight lang=apl inline>⍢</syntaxhighlight> || 🔺 || Under (a.k.a. Dual)
|-
| Del Tilde || <syntaxhighlight lang=apl inline>⍫</syntaxhighlight> || 🔺 || Obverse;<syntaxhighlight lang=apl inline>⍺⍺</syntaxhighlight>but with inverse<syntaxhighlight lang=apl inline>⍵⍵</syntaxhighlight>
|-
| Diaeresis || <syntaxhighlight lang=apl inline>¨</syntaxhighlight> || 🔵 || allows constant operand
|-
| Divide || <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || 🔵 || monadic converts letters to title case when possible
|-
| 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 || <syntaxhighlight lang=apl inline>↓</syntaxhighlight> || 🔵 || allows long<syntaxhighlight lang=apl inline>⍺</syntaxhighlight>
|-
| Down Shoe || <syntaxhighlight lang=apl inline>∪</syntaxhighlight> || 🔵 || allows rank>1
|-
| Downstile || <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || 🔵 || monadic lowercases letters
|-
| Down Tack || <syntaxhighlight lang=apl inline>⊤</syntaxhighlight> || 🔶 || 2s as default left argument
|-
| Ellipsis || <syntaxhighlight lang=apl inline>…</syntaxhighlight> || 🔺 || fill sequence gaps ([[dfns workspace]]'s<syntaxhighlight lang=apl inline>to⍤1</syntaxhighlight>
|-
| Epsilon Underbar || <syntaxhighlight lang=apl inline>⍷</syntaxhighlight> || 🔶 || monadic is Type<syntaxhighlight lang=apl inline>∊</syntaxhighlight>with<syntaxhighlight lang=apl inline>⎕ML←0</syntaxhighlight>
|-
| Equals || <syntaxhighlight lang=apl inline>=</syntaxhighlight> || 🔶 || with [[TAO]]; monad: is-type
|-
| Greater Than || <syntaxhighlight lang=apl inline>></syntaxhighlight> || 🔶 || with TAO; monad: is-strictly-negative/is-visible
|-
| Greater Than Or Equal To || <syntaxhighlight lang=apl inline>≥</syntaxhighlight> || 🔶 || with TAO; monad: is non-positive/is-not-control-character
|-
| house || <syntaxhighlight lang=apl inline>⌂</syntaxhighlight> || 🔺 || prefix for contents of [[dfns workspace]]
|-
| infinity || <syntaxhighlight lang=apl inline>∞</syntaxhighlight> || 🔺 || largest integer (for use with<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>and<syntaxhighlight lang=apl inline>⍣</syntaxhighlight>)
|-
| Iota || <syntaxhighlight lang=apl inline>⍳</syntaxhighlight> || 🔵 || Unicode version of [[dfns workspace]]'s <syntaxhighlight lang=apl inline>iotag</syntaxhighlight>
|-
| Iota Underbar || <syntaxhighlight lang=apl inline>⍸</syntaxhighlight> || 🔵 || allows duplicates/non-Booleans
|-
| 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 || <syntaxhighlight lang=apl inline>⍤</syntaxhighlight> || 🔵 || allows constant left operand, Atop with function right operand
|-
| 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 || <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 || <syntaxhighlight lang=apl inline>⍧</syntaxhighlight> || 🔺 || monad: nub-sieve; dyad: count-in
|-
| Left Shoe With Axis || <syntaxhighlight lang=apl inline>⊂[k]</syntaxhighlight> || 🔵 || as<syntaxhighlight lang=apl inline>⊂</syntaxhighlight>, but called with left operand
|-
| Less Than || <syntaxhighlight lang=apl inline><</syntaxhighlight> || 🔶 || with TAO; monad: is-strictly-positive/is-control-character
|-
| Less Than Or Equal To || <syntaxhighlight lang=apl inline>≤</syntaxhighlight> || 🔶 || with TAO ; monad: is-non-negative/is-invisible
|-
| Minus || <syntaxhighlight lang=apl inline>-</syntaxhighlight> || 🔵 || monadic flips letter case
|-
| macron || <syntaxhighlight lang=apl inline>¯</syntaxhighlight> || 🔵 || as prefix to name or primitive means its inverse
|-
| negative Infinity || <syntaxhighlight lang=apl inline>¯∞</syntaxhighlight> || 🔺 || smallest integer (for use with<syntaxhighlight lang=apl inline>⍣</syntaxhighlight>)
|-
| Nand || <syntaxhighlight lang=apl inline>⍲</syntaxhighlight> || 🔶 || monad: not all equal to type
|-
| Nor || <syntaxhighlight lang=apl inline>⍱</syntaxhighlight> || 🔶 || monad: not any equal to type
|-
| Not Equal To || <syntaxhighlight lang=apl inline>≠</syntaxhighlight> || 🔶 || with TAO; monad: is-non-type
|-
| 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 || <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 || <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 || <syntaxhighlight lang=apl inline>⍴</syntaxhighlight> || 🔵 || allows omitting one dimension length with<syntaxhighlight lang=apl inline>¯1</syntaxhighlight>
|-
| Right Shoe Underbar || <syntaxhighlight lang=apl inline>⊇</syntaxhighlight> || 🔺 || monadic discloses if scalar, dyadic indexes sanely
|-
| Right Shoe Underbar With Axis || <syntaxhighlight lang=apl inline>⊇[k]</syntaxhighlight> || 🔺 || as above, but called with left operand
|-
| Root || <syntaxhighlight lang=apl inline>√</syntaxhighlight> || 🔺 || (Square) Root
|-
| Semicolon Underbar || <syntaxhighlight lang=apl inline>⍮</syntaxhighlight> || 🔺 || (Half) Pair; use<syntaxhighlight lang=apl inline>↑⍤⍮</syntaxhighlight>to add axis
|-
| Slash || <syntaxhighlight lang=apl inline>/</syntaxhighlight> || 🔵 || allows short and/or multiple left args
|-
| Slash Bar || <syntaxhighlight lang=apl inline>⌿</syntaxhighlight> || 🔵 || allows short and/or multiple left args
|-
| 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 || <syntaxhighlight lang=apl inline>|</syntaxhighlight> || 🔵 || monadic normalises letters to lowercase (upper then lower)
|-
| 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 || <syntaxhighlight lang=apl inline>~</syntaxhighlight> || 🔵 || monadic allows probabilities, dyadic allows rank>1
|-
| Tilde Diaeresis || <syntaxhighlight lang=apl inline>⍨</syntaxhighlight> || 🔵 || allows constant operand
|-
| 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 || <syntaxhighlight lang=apl inline>↑</syntaxhighlight> || 🔵 || allows long<syntaxhighlight lang=apl inline>⍺</syntaxhighlight>
|-
| Up Shoe || <syntaxhighlight lang=apl inline>∩</syntaxhighlight> || 🔶 || monadic is self-classify; dyadic allows rank>1
|-
| Upstile || <syntaxhighlight lang=apl inline>⌈</syntaxhighlight> || 🔵 || monadic uppercases letters
|-
| Up Tack || <syntaxhighlight lang=apl inline>⊥</syntaxhighlight> || 🔶 || 2 as default left argument
|-
| Vel || <syntaxhighlight lang=apl inline>∨</syntaxhighlight> || 🔶 || monadic is [[Descending Sort]]
|-
| Wedge || <syntaxhighlight lang=apl inline>∧</syntaxhighlight> || 🔶 || monadic is [[Ascending Sort]]
|-
| 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 || <syntaxhighlight lang=apl inline>⎕EM</syntaxhighlight> || 🔺 || Self-inverse<syntaxhighlight lang=apl inline>⎕EM</syntaxhighlight>
|-
| 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 || <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 || <syntaxhighlight lang=apl inline>⎕UCS</syntaxhighlight> || 🔵 || scalar when monadic
|}
<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]]

Navigation menu