A+

From APL Wiki
Revision as of 12:12, 14 May 2020 by Marshall (talk | contribs) (Turns out there's another A+)
Jump to navigation Jump to search

This page is about the Morgan Stanley dialect. For the project based on APL 90 (dialect) and presented at APL90, which replaced functions with first-class blocks, see A+ (Girardot).

A+ is an extension of the A language. A was created in 1985 by Arthur Whitney, then of Morgan Stanley. At the time, various departments had a significant investment in APL applications and talent, APL being a language well-suited to the manipulation of large arrays of numbers. As technology was moving from the mainframe to distributed systems, there was a search for a suitable APL implementation to run on SunOS, the distributed platform of the period, and this prompted Whitney to create A as a statically typed dialect of APL with various novelties like symbols as a simple scalar type and the Rank operator.

Over the course of the next few years, various extensions were made to the language, culminating in A+ in 1988, with "+" referring to the graphical user interface. While an A+ development group was formally in 1992, presented the very first version of K that very same year, and by 1994, K became the official successor of A+. In 2001, the source code was made public, and various volunteers took over development until 2008. From then until 2014 it was maintained by Robert Lefkowitz.

Primitives

Glyph Dyadic Monadic
+ Add Identity
- Subtract Negate
× Multiply Sign
÷ Divide Reciprocal
* Power Exponential
Log Natural log
| Residue Absolute value
Decode Pack
Encode Unpack
? Deal Roll
Circle (sin, cos, ...) Pi times
Solve Matrix Inverse
Max Ceiling
Min Floor
< Less than Enclose
Less than or Equal to
= Equal to
> Greater than Disclose
Greater than or Equal to
Not equal to
Bins Grade up
Grade down
Match Depth
Find Interval
Member Rake (like Enlist)
^ And Stop
Or or Cast Type
Format Default Format
Execute in Context or Protected Execute Execute
% Value in Context Value (of a symbol)
Assignment or Selective Assignment Result (returns from functions)
Pick Raze
# Choose Count
[;] Bracket Indexing (varying number of arguments)
Take Signal
Drop Print
Rotate Reverse
Transpose Axes Transpose
! Restructure Item Ravel
Partition (a little like Split) Partition Count
Reshape Shape
Left Null (returns ())
Right
Combine Symbols Separate Symbols
, Catenate Ravel
~ Laminate Not
/ Replicate Reduce (+ × ⌈ ⌊ ∧ ∨)
\ Expand Scan (+ × ⌈ ⌊ ∧ ∨)
. Inner Product (+.× ⌈.+ ⌊.+)
∘. Outer Product (+ - × ÷ | ⌈ ⌊ < ≤ = ≥ > ≠)
@ Rank
¨ Each or Apply
Bitwise


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.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