Extended Dyalog APL: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
(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]]

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