Extended Dyalog APL

From APL Wiki
Revision as of 13:59, 29 August 2024 by Marshall (talk | contribs) (Influenced TinyAPL)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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 APLKapNARS2000PometoTinyAPL
Historical A Programming LanguageA+ (A) ∙ APL#APL2CAPL\360APL/700APL\1130APL\3000APL.68000APL*PLUSAPL.jlAPL.SVAPLGOLAPLXExtended 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