GNU APL is a cross platform APL (APL2) interpreter.
GNU APL is an (almost) complete implementation of ISO standard 13751 aka. Programming Language APL, Extended.
The APL interpreter has implemented:
- nested arrays and related functions
- complex numbers, and
- a shared variable interface
Extensions to the APL2 standard include:
- SQL interface
- structured variables and associative arrays
- a GTK3 interface for plotting and even building full UI applications in APL.
In general, it follows IBM's APL2 implementation. For a wonderful introduction to APL2, refer to APL2 At A Glance, by Brown, Pakin & Polivka.
Those who are studying APL would do well to contrast GNU APL with Dyalog APL, a proprietary implementation that is actively developed by its namesake company, which has diverged from APL2 in some respects. Many examples nowadays which are found online use Dyalog operators and syntax extensions; to understand the differences refer to this discussion of APL "evolution" or "migration" levels and how they affect the meaning of certain operators: Mix (up arrow) in GNU APL?
The most important difference between APL2 and Dyalog APL is that Dyalog adds support for tacit (more commonly called 'point free') syntax, if/then/else branch control rather than just the traditional → branch, and supports multiple statements within dfns (lambda functions). However, with some basic knowledge of APL2 and how Dyalog differs, programs can be translated from one to the other with minimal effort.