Timeline of APL primitives: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
m (Swapped glyphs)
mNo edit summary
 
(13 intermediate revisions by the same user not shown)
Line 4: Line 4:
! Year !! Dialect        !! Primitives
! Year !! Dialect        !! Primitives
|-
|-
| 1965 || [[IVSYS/7090]] || [[Add]], [[Negate]], [[Subtract]], [[Multiply]], [[Divide]], [[Floor]], [[Ceiling]], [[Minimum]], [[Maximum]], [[Absolute value]], [[Modulus]], [[Exponential]], [[Power]], [[Not]], [[And]], [[Or]], [[comparison]]s, [[Iota]], [[Index of]], [[Shape]], [[Reshape]], [[Ravel]], [[Catenate]], [[Rotate]] (as <syntaxhighlight lang=apl inline>↑↓</syntaxhighlight>), [[Member of]], [[Encode]], [[Decode]], [[Reduce]], [[Compress]], [[Expand]], [[Inner product]], [[Outer product]], [[Assignment]], [[Bracket indexing]], [[Branch]]/[[Label]]
| 1965 || [[IVSYS/7090]] || [[Identity]] (<syntaxhighlight lang=apl inline>+</syntaxhighlight>), [[Add]], [[Negate]], [[Subtract]], [[Multiply]], [[Divide]], [[Floor]], [[Ceiling]], [[Minimum]], [[Maximum]], [[Absolute value]], [[Modulus]], [[Exponential]], [[Power]], [[Not]], [[And]], [[Or]], [[comparison]]s, [[Iota]], [[Index of]], [[Shape]], [[Reshape]], [[Ravel]], [[Catenate]], [[Rotate]] (as <syntaxhighlight lang=apl inline>↑↓</syntaxhighlight>), [[Member of]], [[Encode]], [[Decode]], [[Reduce]], [[Compress]], [[Expand]], [[Inner product]], [[Outer product]], [[Assignment]] (including indexed), [[Bracket indexing]], [[Branch]]/[[Label]]
|-
|-
| 1966 || [[APL\360]]    || [[Reciprocal]], [[Natural Logarithm]], [[Factorial]], [[Combinations]], [[Roll]], [[Transpose]], [[Rotate]] (<syntaxhighlight lang=apl inline>⌽</syntaxhighlight>), [[Function axis]]
| 1966 || [[APL\360]]    || [[Reciprocal]], [[Natural Logarithm]], [[Factorial]], [[Combinations]], [[Roll]], [[Transpose]], [[Reverse]]/[[Rotate]] (<syntaxhighlight lang=apl inline>⌽</syntaxhighlight>), [[Function axis]]
|-
|-
| 1968 || [[APL\360]]    || [[Signum]], [[Deal]], [[Pi times]], [[Circular]], [[Nand]], [[Nor]], [[Take]] (<syntaxhighlight lang=apl inline>↑</syntaxhighlight>), [[Drop]] (<syntaxhighlight lang=apl inline>↓</syntaxhighlight>), [[Grade]], [[Rotate First]] (<syntaxhighlight lang=apl inline>⊖</syntaxhighlight>), [[I-Beam]]
| 1968 || [[APL\360]]    || [[Signum]], [[Logarithm]], [[Deal]], [[Pi times]], [[Circular]], [[Nand]], [[Nor]], [[Take]] (<syntaxhighlight lang=apl inline>↑</syntaxhighlight>), [[Drop]] (<syntaxhighlight lang=apl inline>↓</syntaxhighlight>), [[Grade]], [[Reverse First]]/[[Rotate First]] (<syntaxhighlight lang=apl inline>⊖</syntaxhighlight>), [[I-Beam]]
|-
|-
| 1970 || [[APL\360]]    || overtake with [[Take]]
| 1970 || [[APL\360]]    || overtake with [[Take]]
Line 15: Line 15:
|-
|-
| 1973 || [[APL.SV]]    || [[Execute]], [[Format]], [[Scan]]
| 1973 || [[APL.SV]]    || [[Execute]], [[Format]], [[Scan]]
|-
| 1974 || [[APL/700]]    || [[Union]], [[Intersection]], [[Set Difference]] (but these functions only return unique elements), [[modified assignment]] (scalar dyadics only)
|-
|-
| 1980 || [[SHARP APL]]  || [[GCD]]/[[LCM]] extending [[Or]]/[[And]] (proposed [[Eugene McDonnell|McDonnell]] 1975)
| 1980 || [[SHARP APL]]  || [[GCD]]/[[LCM]] extending [[Or]]/[[And]] (proposed [[Eugene McDonnell|McDonnell]] 1975)
Line 27: Line 29:
                           | [[Partitioned Enclose]] (<syntaxhighlight lang=apl inline>⊂</syntaxhighlight>), [[First]] (<syntaxhighlight lang=apl inline>⊃</syntaxhighlight>), [[Type]] (<syntaxhighlight lang=apl inline>⊤</syntaxhighlight>), [[Split]] (<syntaxhighlight lang=apl inline>↓</syntaxhighlight>), [[Mix]] (<syntaxhighlight lang=apl inline>↑</syntaxhighlight>), [[Not Match]], [[Catenate First]] (<syntaxhighlight lang=apl inline>⍪</syntaxhighlight>), [[Compose]] (<syntaxhighlight lang=apl inline>∘</syntaxhighlight>), [[Each]] (<syntaxhighlight lang=apl inline>¨</syntaxhighlight>), [[Zilde]], [[Choose indexing]]
                           | [[Partitioned Enclose]] (<syntaxhighlight lang=apl inline>⊂</syntaxhighlight>), [[First]] (<syntaxhighlight lang=apl inline>⊃</syntaxhighlight>), [[Type]] (<syntaxhighlight lang=apl inline>⊤</syntaxhighlight>), [[Split]] (<syntaxhighlight lang=apl inline>↓</syntaxhighlight>), [[Mix]] (<syntaxhighlight lang=apl inline>↑</syntaxhighlight>), [[Not Match]], [[Catenate First]] (<syntaxhighlight lang=apl inline>⍪</syntaxhighlight>), [[Compose]] (<syntaxhighlight lang=apl inline>∘</syntaxhighlight>), [[Each]] (<syntaxhighlight lang=apl inline>¨</syntaxhighlight>), [[Zilde]], [[Choose indexing]]
|-
|-
| 1981 || [[SHARP APL]]  || [[function rank]], close [[Over]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>), [[Atop]] (<syntaxhighlight lang=apl inline>⍥</syntaxhighlight>), [[Under]] (<syntaxhighlight lang=apl inline>¨</syntaxhighlight>) ([[Operators and Functions]] 1978; not widely adopted)
| 1981 || [[SHARP APL]]  || [[function rank]], [[Close composition|close]] [[Over]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>), [[Atop]] (<syntaxhighlight lang=apl inline>⍥</syntaxhighlight>), [[Under]] (<syntaxhighlight lang=apl inline>¨</syntaxhighlight>) ([[Operators and Functions]] 1978; not widely adopted) <br/> [[complex]] extensions: [[Circular]] functions 8 and up ([[Eugene McDonnell|McDonnell]] 1977), [[Conjugate]] (proposed Paul Penfield 1977; IBM documenation by 1975)
|-
|-
| 1982 || [[SHARP APL]]  || [[Determinant]] (<syntaxhighlight lang=apl inline>.</syntaxhighlight>) ([[Ken Iverson|Iverson]] 1982)
| 1982 || [[SHARP APL]]  || [[Determinant]] (<syntaxhighlight lang=apl inline>.</syntaxhighlight>) ([[Ken Iverson|Iverson]] 1982)
|-
| 1982 || [[SHARP APL]]  || [[complex Floor]], Ceiling, Modulus, Encode ([[Eugene McDonnell|McDonnell]] 1973)
|-
|-
| 1983 || [[SHARP APL]]  || [[Rank operator]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>) ([[Arthur Whitney|Whitney]] 1982) <br/> [[Left]] (<syntaxhighlight lang=apl inline>⊣</syntaxhighlight>), [[Right]] (<syntaxhighlight lang=apl inline>⊢</syntaxhighlight>), [[Conditional enclose]]/[[Link]] (<syntaxhighlight lang=apl inline>⊃</syntaxhighlight>)
| 1983 || [[SHARP APL]]  || [[Rank operator]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>) ([[Arthur Whitney|Whitney]] 1982) <br/> [[Left]] (<syntaxhighlight lang=apl inline>⊣</syntaxhighlight>), [[Right]] (<syntaxhighlight lang=apl inline>⊢</syntaxhighlight>), [[Conditional enclose]]/[[Link]] (<syntaxhighlight lang=apl inline>⊃</syntaxhighlight>)
|-
|-
| 1984 || [[APL2]]      || [[Partition]] (<syntaxhighlight lang=apl inline></syntaxhighlight>), [[First]] (<syntaxhighlight lang=apl inline></syntaxhighlight>) and [[Mix]] (<syntaxhighlight lang=apl inline></syntaxhighlight>) opposite to NARS, [[Index (function)|Index]] (<syntaxhighlight lang=apl inline></syntaxhighlight>), [[Find]] (<syntaxhighlight lang=apl inline>⍷</syntaxhighlight>), [[Depth]] (<syntaxhighlight lang=apl inline>≡</syntaxhighlight>)
| 1984 || [[APL2]]      || [[First]] (<syntaxhighlight lang=apl inline></syntaxhighlight>) and [[Mix]] (<syntaxhighlight lang=apl inline></syntaxhighlight>) opposite to NARS, [[Partition]] (<syntaxhighlight lang=apl inline></syntaxhighlight>), [[Enlist]] (<syntaxhighlight lang=apl inline></syntaxhighlight>), [[Find]] (<syntaxhighlight lang=apl inline>⍷</syntaxhighlight>), [[Depth]] (<syntaxhighlight lang=apl inline>≡</syntaxhighlight>), [[Index (function)|Index]] (<syntaxhighlight lang=apl inline>⌷</syntaxhighlight>), [[selective assignment]]
|-
|-
| 1987 || [[SHARP APL]]  || short left argument for [[Take]], [[Drop]]
| 1987 || [[SHARP APL]]  || [[Table]] (<syntaxhighlight lang=apl inline>⍪</syntaxhighlight>) <br/> short left argument for [[Take]], [[Drop]]
|-
|-
| 1989 || [[SHARP APL]]  || [[Nub Sieve]] (<syntaxhighlight lang=apl inline>≠</syntaxhighlight>), [[Find]] (<syntaxhighlight lang=apl inline>⍷</syntaxhighlight>), [[Raze]] (<syntaxhighlight lang=apl inline>↓</syntaxhighlight>) ([[A Dictionary of APL]] 1987)
| 1989 || [[SHARP APL]]  || [[Nub Sieve]] (<syntaxhighlight lang=apl inline>≠</syntaxhighlight>), [[Raze]] (<syntaxhighlight lang=apl inline>↓</syntaxhighlight>) ([[A Dictionary of APL]] 1987)
|-
|-
<!-- | ?    || [[SHARP APL]]           || [[From]] ([[Rationalized APL]] 1983)
<!-- | ?    || [[SHARP APL]] || [[From]] ([[Rationalized APL]] 1983)
|- -->
|- -->
| 2009 || [[NARS2000]]  || [[Function train]]s (proposed [[Ken Iverson|Iverson]] and [[Eugene McDonnell|McDonnell]] 1989; [[J]] 1990)
| 2009 || [[NARS2000]]  || [[Function train]]s (proposed [[Ken Iverson|Iverson]] and [[Eugene McDonnell|McDonnell]] 1989; [[J]] 1990)
Line 45: Line 49:
| 2010 || [[NARS2000]]  || [[Tally]] (<syntaxhighlight lang=apl inline>></syntaxhighlight>, changed to <syntaxhighlight lang=apl inline>≢</syntaxhighlight> following Dyalog, 2011) ([[A+]] 1988, [[J]] 1990)
| 2010 || [[NARS2000]]  || [[Tally]] (<syntaxhighlight lang=apl inline>></syntaxhighlight>, changed to <syntaxhighlight lang=apl inline>≢</syntaxhighlight> following Dyalog, 2011) ([[A+]] 1988, [[J]] 1990)
|-
|-
| 2010 || [[NARS2000]]  || [[Indices]] (<syntaxhighlight lang=apl inline>⍸</syntaxhighlight>) ([[K]] 1996; [[J]] 2003)
| 2010 || [[NARS2000]]  || [[Indices]] (<syntaxhighlight lang=apl inline>⍸</syntaxhighlight>) ([[K]] 1996, [[J]] 2003)
|-
|-
| 2011 || [[NARS2000]]  || [[Over]] (<syntaxhighlight lang=apl inline>⍥</syntaxhighlight>) (SHARP APL (close) 1981)
| 2011 || [[NARS2000]]  || [[Over]] (<syntaxhighlight lang=apl inline>⍥</syntaxhighlight>) (SHARP (close) 1981)
|-
|-
| 2011 || [[NARS2000]]  || [[Square Root]]/[[Root]] (<syntaxhighlight lang=apl inline>√</syntaxhighlight>) (proposed [[Eugene McDonnell|McDonnell]] 1986, [[J]] 1990)
| 2011 || [[NARS2000]]  || [[Square Root]]/[[Root]] (<syntaxhighlight lang=apl inline>√</syntaxhighlight>) (proposed [[Eugene McDonnell|McDonnell]] 1986; [[J]] 1990)
|-
|-
| 2011 || [[Dyalog APL]] || [[Key]] (<syntaxhighlight lang=apl inline>⌸</syntaxhighlight>) ([[J]] 1990)<!-- <br/> [[Variant]] (<syntaxhighlight lang=apl inline>⍠</syntaxhighlight>) ([[Operators and Functions]] 1978)-->
| 2011 || [[Dyalog APL]] || [[Key]] (<syntaxhighlight lang=apl inline>⌸</syntaxhighlight>) ([[J]] 1990)<!-- <br/> [[Variant]] (<syntaxhighlight lang=apl inline>⍠</syntaxhighlight>) ([[Operators and Functions]] 1978)-->
Line 55: Line 59:
| 2014 || [[Dyalog APL]] || 2-[[train]] as [[Atop]] (proposed [[Roger Hui|Hui]] 2006; [[I]] 2012), [[major cell search]] ([[A+]] 1988)
| 2014 || [[Dyalog APL]] || 2-[[train]] as [[Atop]] (proposed [[Roger Hui|Hui]] 2006; [[I]] 2012), [[major cell search]] ([[A+]] 1988)
|-
|-
| 2017 || [[Dyalog APL]] || [[At]] (<syntaxhighlight lang=apl inline>@</syntaxhighlight>) ([[John Scholes|Scholes]]) <br/> [[Stencil]] (<syntaxhighlight lang=apl inline>⌺</syntaxhighlight>) (from [[Cut]]: [[Rationalized APL]] 1983, [[J]] 1994) <br/> [[Interval Index]] (<syntaxhighlight lang=apl inline>⍸</syntaxhighlight>) ([[A+]] 1988, [[J]] 2006) <br/> [[Nest]] (<syntaxhighlight lang=apl inline>⊆</syntaxhighlight>) (SHARP APL 1983)
| 2017 || [[Dyalog APL]] || [[At]] (<syntaxhighlight lang=apl inline>@</syntaxhighlight>) ([[John Scholes|Scholes]]) <br/> [[Stencil]] (<syntaxhighlight lang=apl inline>⌺</syntaxhighlight>) (from [[Cut]]: [[Rationalized APL]] 1983, [[J]] 1994) <br/> [[Interval Index]] (<syntaxhighlight lang=apl inline>⍸</syntaxhighlight>) ([[A+]] 1988, [[J]] 2006) <br/> [[Nest]] (<syntaxhighlight lang=apl inline>⊆</syntaxhighlight>) (SHARP 1983)
|-
|-
<!-- | 2018 || [[dzaima/APL]] || [[Array notation]] (numerous other languages; proposed [[Phil Last|Last]] 2015)
<!-- | 2018 || [[dzaima/APL]] || [[Array notation]] (numerous other languages; proposed [[Phil Last|Last]] 2015)
Line 61: Line 65:
| 2019 || [[dzaima/APL]] || [[Reverse Compose]] (<syntaxhighlight lang=apl inline>⍛</syntaxhighlight>) ([[I]] 2012, [[Extended Dyalog APL]] 2019) <!-- <br/> [[Pair]] (<syntaxhighlight lang=apl inline>⍮</syntaxhighlight>) ([[Nial]] dyadic 1982, [[I]] 2012) -->
| 2019 || [[dzaima/APL]] || [[Reverse Compose]] (<syntaxhighlight lang=apl inline>⍛</syntaxhighlight>) ([[I]] 2012, [[Extended Dyalog APL]] 2019) <!-- <br/> [[Pair]] (<syntaxhighlight lang=apl inline>⍮</syntaxhighlight>) ([[Nial]] dyadic 1982, [[I]] 2012) -->
|-
|-
| 2020 || [[Dyalog APL]] || [[Atop]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>) (SHARP APL (close) 1981), [[Constant]] (<syntaxhighlight lang=apl inline>⍨</syntaxhighlight>) ([[I]] 2012)
| 2020 || [[Dyalog APL]] || [[Atop]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>) (SHARP (close) 1981), [[Constant]] (<syntaxhighlight lang=apl inline>⍨</syntaxhighlight>) ([[I]] 2012)
|}
|}



Latest revision as of 22:14, 18 March 2024

The following table lists APL primitives, primitive extensions, and primitive-like syntax that are implemented across many dialects, or are precursors of such features. Features are ordered by the first APL dialect to implement them, and previous definitions in other array languages or as proposals are indicated in parentheses. Because primitives tend to have multiple names and may even change name within a dialect, common modern names are used rather than the name when introduced.

Year Dialect Primitives
1965 IVSYS/7090 Identity (+), Add, Negate, Subtract, Multiply, Divide, Floor, Ceiling, Minimum, Maximum, Absolute value, Modulus, Exponential, Power, Not, And, Or, comparisons, Iota, Index of, Shape, Reshape, Ravel, Catenate, Rotate (as ↑↓), Member of, Encode, Decode, Reduce, Compress, Expand, Inner product, Outer product, Assignment (including indexed), Bracket indexing, Branch/Label
1966 APL\360 Reciprocal, Natural Logarithm, Factorial, Combinations, Roll, Transpose, Reverse/Rotate (), Function axis
1968 APL\360 Signum, Logarithm, Deal, Pi times, Circular, Nand, Nor, Take (), Drop (), Grade, Reverse First/Rotate First (), I-Beam
1970 APL\360 overtake with Take
1970 APL\360 Matrix Inverse, Matrix Divide, Laminate (,[])
1973 APL.SV Execute, Format, Scan
1974 APL/700 Union, Intersection, Set Difference (but these functions only return unique elements), modified assignment (scalar dyadics only)
1980 SHARP APL GCD/LCM extending Or/And (proposed McDonnell 1975)
1980 SHARP APL Replicate extending Compress (Bernecky 1980)
dyadic and high-rank Grade (proposed Howard Smith 1979)
1981 NARS Enclose, Match, Pick, nested Index Generator, stranded assignment (proposed Brown 1971)
Unique, Union, Intersection, Set Difference, Commute (), Under (), Power (), Windowed Reduction (Operators and Functions 1978)
Partitioned Enclose (), First (), Type (), Split (), Mix (), Not Match, Catenate First (), Compose (), Each (¨), Zilde, Choose indexing
1981 SHARP APL function rank, close Over (), Atop (), Under (¨) (Operators and Functions 1978; not widely adopted)
complex extensions: Circular functions 8 and up (McDonnell 1977), Conjugate (proposed Paul Penfield 1977; IBM documenation by 1975)
1982 SHARP APL Determinant (.) (Iverson 1982)
1982 SHARP APL complex Floor, Ceiling, Modulus, Encode (McDonnell 1973)
1983 SHARP APL Rank operator () (Whitney 1982)
Left (), Right (), Conditional enclose/Link ()
1984 APL2 First () and Mix () opposite to NARS, Partition (), Enlist (), Find (), Depth (), Index (), selective assignment
1987 SHARP APL Table ()
short left argument for Take, Drop
1989 SHARP APL Nub Sieve (), Raze () (A Dictionary of APL 1987)
2009 NARS2000 Function trains (proposed Iverson and McDonnell 1989; J 1990)
2010 NARS2000 Tally (>, changed to following Dyalog, 2011) (A+ 1988, J 1990)
2010 NARS2000 Indices () (K 1996, J 2003)
2011 NARS2000 Over () (SHARP (close) 1981)
2011 NARS2000 Square Root/Root () (proposed McDonnell 1986; J 1990)
2011 Dyalog APL Key () (J 1990)
2014 Dyalog APL 2-train as Atop (proposed Hui 2006; I 2012), major cell search (A+ 1988)
2017 Dyalog APL At (@) (Scholes)
Stencil () (from Cut: Rationalized APL 1983, J 1994)
Interval Index () (A+ 1988, J 2006)
Nest () (SHARP 1983)
2019 dzaima/APL Reverse Compose () (I 2012, Extended Dyalog APL 2019)
2020 Dyalog APL Atop () (SHARP (close) 1981), Constant () (I 2012)

See also

APL built-ins [edit]
Primitives (Timeline) Functions
Scalar
Monadic ConjugateNegateSignumReciprocalMagnitudeExponentialNatural LogarithmFloorCeilingFactorialNotPi TimesRollTypeImaginarySquare Root
Dyadic AddSubtractTimesDivideResiduePowerLogarithmMinimumMaximumBinomialComparison functionsBoolean functions (And, Or, Nand, Nor) ∙ GCDLCMCircularComplexRoot
Non-Scalar
Structural ShapeReshapeTallyDepthRavelEnlistTableCatenateReverseRotateTransposeRazeMixSplitEncloseNestCut (K)PairLinkPartitioned EnclosePartition
Selection FirstPickTakeDropUniqueIdentityStopSelectReplicateExpandSet functions (IntersectionUnionWithout) ∙ Bracket indexingIndexCartesian ProductSort
Selector Index generatorGradeIndex OfInterval IndexIndicesDealPrefix and suffix vectors
Computational MatchNot MatchMembershipFindNub SieveEncodeDecodeMatrix InverseMatrix DivideFormatExecuteMaterialiseRange
Operators Monadic EachCommuteConstantReplicateExpandReduceWindowed ReduceScanOuter ProductKeyI-BeamSpawnFunction axis
Dyadic BindCompositions (Compose, Reverse Compose, Beside, Withe, Atop, Over) ∙ Inner ProductDeterminantPowerAtUnderRankDepthVariantStencilCutDirect definition (operator)
Quad names Index originComparison toleranceMigration levelAtomic vector