Jump to content

APL (programming language)

From Alfawiki
APL
Company typeProgramming language
IndustryComputer programming
Founded1960s
FounderKenneth E. Iverson
ProductsProgramming language for array manipulation and mathematical computation

APL (an acronym derived from the book A Programming Language) is a programming language created during the 1960s by Kenneth E. Iverson. Its primary data structure is the multidimensional array. APL utilizes an extensive set of unique graphic symbols to denote most functions and operators, allowing for highly succinct code. The language has had a profound impact on concept modeling, spreadsheet applications, functional programming, and mathematical computation software. Moreover, APL has served as an inspiration for many subsequent programming languages.

Mathematical notation

Beginning in 1957 at Harvard University, Kenneth E. Iverson developed a mathematical notation designed for array manipulation. After joining IBM in 1960, he collaborated with Adin Falkoff to publish this notation in the 1962 book A Programming Language. IBM utilized this notation internally within research documentation related to computer systems such as the Burroughs B5000.

Iverson further applied his notation in a preliminary chapter co-authored with Fred Brooks for the book Automatic Data Processing, which appeared in 1963. In recognition of his contributions to APL, Iverson was honored with the Turing Award in 1979.

Evolution into a programming language

By 1962, discussions around standardizing instruction sets for the IBM System/360 family led to considering Iverson’s notation as a tool for describing entire computer systems.

In 1963, IBM’s Herbert Hellerman implemented a portion of this notation on an IBM 1620 machine, naming it the Personalized Array Translator (PAT). This system was employed in educational environments to compute transcendental functions.

That same year, Falkoff, Iverson, and Edward H. Sussenguth Jr. formally documented the architecture of the IBM System/360 using Iverson’s notation, published in the IBM Systems Journal in 1964. Their efforts then turned toward transforming the notation into a practical programming language, influenced partly by John L. Lawrence’s interest in educational computing applications following IBM’s acquisition of Science Research Associates.

With the addition of Stanford researchers Lawrence M. Breed and Philip S. Abrams at IBM Research, they developed an implementation written in FORTRAN IV for the IBM 7090 computer. Completed by late 1965 and named IVSYS (Iverson system), this interpreter employed English keywords instead of APL’s specialized character set and was adapted for time-sharing on an IBM System/360 Model 50, becoming operational within IBM by November 1966.

Hardware

Before CRT terminals became widespread, a significant advancement for APL usability was the creation of a specialized typing element for the IBM Selectric typewriter, which contained all APL symbols. This element was used on paper-based terminal devices such as the IBM 1050 and IBM 2741, enabling programmers to input and print authentic APL characters instead of cumbersome English substitutes. Falkoff and Iverson designed these unique Selectric typing elements (models 987 and 988) in late 1964, preceding any dedicated APL computer system. Iverson credited Falkoff with originating the concept of utilizing the IBM Selectric type element to represent APL notation.

Since the full set of APL symbols exceeded the typing element’s limit of 88 characters (even when restricted to uppercase), certain symbols required composing by overstriking two characters—for instance, the grade up symbol was created by combining delta (shift-H) with Sheffer stroke (shift-M).

Commercial availability

The inaugural interactive APL session took place in 1966 when Larry Breed utilized an IBM 1050 terminal at IBM Mohansic Labs, located near the Thomas J. Watson Research Center.

IBM spearheaded APL’s entry into the market, launching the initial public release in 1968 for the IBM 1130 under the name APL\1130. Distributed without charge and lacking official support or warranty, it operated with as little as 8k 16-bit words of memory and necessitated a dedicated 1MB hard drive.

From the late 1960s through the early 1980s, APL found widespread adoption on mainframe timesharing platforms, partly because it could accommodate multiple users on hardware that lacked dynamic address translation capabilities. Performance enhancements included the introduction of APL Assist Microcode on select IBM System/370 mainframes, which incorporated some APL execution functions directly into firmware. By the mid-1980s, many users transitioned their applications to personal computers as hardware technology advanced.

Early IBM APL interpreters designed for the IBM 360/370 series incorporated their own multi-user management systems, effectively functioning as independent timesharing environments. Internally launched at IBM in 1966, APL\360 was a multi-user interpreter featuring privileged "I-beam" commands that allowed interaction between APL programs and operating system services.

In 1973, IBM introduced APL.SV, which expanded functionality by enabling shared variables that could access external resources such as operating system files. The IBM mainframe interpreter was also adapted for use on the IBM 5100 desktop computer during the mid-1970s—a notable development given that most small computers at that time only supported BASIC. Throughout the 1980s, VSAPL became prevalent across various platforms including CMS, TSO, VSPC, MUSIC/SP, and CICS.

Concurrent efforts included Patrick E. Hagerty’s University of Maryland implementation of APL for Sperry UNIVAC 1100 series mainframes during 1973–74. Xerox released Xerox APL in June 1975 for Xerox and Honeywell mainframes running CP-V and CP-6 operating systems.

During the 1960s and 1970s, several timesharing companies commercialized customized versions of IBM’s APL\360 interpreters. Prominent North American providers comprised IP Sharp Associates, Scientific Time Sharing Corporation (STSC), Time Sharing Resources (TSR), and The Computer Company (TCC). In 1978, CompuServe launched an APL interpreter based on software from Digital Equipment Corporation and Carnegie Mellon University running on DEC KI/KL machines, targeting both commercial and consumer users. The emergence of cost-effective mainframes such as the IBM 4300 series along with personal computers contributed to the decline of timesharing services by the mid-1980s.

Sharp APL, developed by IP Sharp Associates, evolved from a timesharing service into a commercial software product around 1979. It introduced sophisticated features including packages (which grouped objects into variables), a file system, nested arrays, and shared variables.

Additional manufacturers of mainframe and minicomputer systems providing APL interpreters included Burroughs, Control Data Corporation (CDC), Data General, Digital Equipment Corporation (DEC), Harris, Hewlett-Packard (HP), Siemens, Xerox, among others.

The community of APL implementers was nurtured through regular gatherings organized initially by Garth Foster at Syracuse University’s Minnowbrook Conference Center and later by Eugene McDonnell at venues such as Asilomar Conference Grounds and Pajaro Dunes in California. The ACM SIGAPL special interest group continues to foster this professional network.

Microcomputers

Starting in the mid-1970s, BASIC was the predominant programming language for microcomputers. Nonetheless, certain microcomputers provided APL support, beginning with the Intel 8008-powered MCM/70 introduced in 1974, mainly utilized in educational settings. The 1977 VideoBrain Family Computer incorporated its own variant of APL, known as APL/S.

The Commodore SuperPET, released in 1981, featured an APL interpreter created by the University of Waterloo. In 1976, Bill Gates revealed that Microsoft was working on an APL version for the Intel 8080 and Motorola 6800 processors; however, it was never launched due to concerns about software piracy.

APL2

In the early 1980s, IBM developed APL2 under the leadership of Jim Brown, introducing capabilities such as nested arrays and expanded language functionalities. Ken Iverson departed IBM to oversee Sharp APL’s development according to his vision. The initial release of APL2 occurred in 1984 for CMS and TSO environments, followed by workstation versions compatible with Windows, OS/2, AIX, Linux, and Solaris.

APL2 established itself as the benchmark for new APL interpreters on Unix-based microcomputers. Compatibility with APL2 is widely promoted by most vendors as a significant product feature. IBM markets APL2 for diverse applications including problem-solving, system design, prototyping, engineering and scientific calculations, expert systems, education, visualization, and database connectivity.

Modern implementations

Current versions of APL from vendors such as APLX and Dyalog incorporate enhancements like object-oriented programming, integration with .NET, XML-array conversion tools, graphical capabilities, operating system interfaces, and support for lambda calculus expressions. Free software options like GNU APL for Linux and NARS2000 for Windows (also operable on Linux via Wine) provide full-featured APL2 implementations along with extended language features.

Derivative languages

APL has served as a foundation or inspiration for numerous languages:

  • A and A+, which offer graphical extensions as alternatives to traditional APL.
  • FP, a language focused on functional programming paradigms.
  • Ivy, an interpreter resembling APL created by Rob Pike that uses ASCII input.
  • J, designed by Iverson to employ ASCII characters with digraphs instead of specialized symbols.
  • K, a proprietary variant of APL developed by Arthur Whitney.
  • MATLAB, a tool primarily used for numerical computations.
  • Nial, a high-level array-oriented language featuring functional notation.
  • Polymorphic Programming Language, an interactive and extensible language sharing a similar foundation.
  • S, a statistical computing language now largely supplanted by the open-source R.
  • Snap!, a block-based low-code environment derived from Scratch.
  • Speakeasy, a platform for numerical computing.
  • Wolfram Language, the programming language behind Mathematica, influenced by concepts from APL.

Character set

APL’s distinctive character set has attracted both acclaim and criticism. During the 1960s and 1970s, only a limited number of terminals could render APL symbols accurately; many relied on IBM Selectric typewriters equipped with special APL typeballs. Early line terminals supporting APL included models like the Texas Instruments TI Model 745 (circa 1977), which provided full support for the character set and offered half- and full-duplex communication modes to connect with remote time-sharing systems.

With advancements in modern graphic displays, printers, and Unicode standards, displaying APL characters is no longer a significant issue. Nevertheless, inputting these symbols still necessitates specialized input methods such as keyboard layouts, virtual keyboards, or reference cards—challenges that can initially hinder new users. Research involving beginners demonstrated that entering APL characters did not substantially obstruct the learning process.

APL’s design minimizes the number of keystrokes required to represent operations, and keyboard layouts become more intuitive through regular use. Dedicated APL keyboards remain available alongside freely downloadable fonts compatible with platforms like Microsoft Windows. Achieving productivity improvements depends largely on sufficient practice to become proficient with the language’s unique symbols, semantics, and idiomatic expressions.

Design

APL programs consist of sequences of monadic or dyadic functions and operators that act upon arrays. Its fundamental elements are single or compound symbols with consistent right-associative precedence, causing APL expressions to be interpreted from right to left.

In its early form (around 1970), APL did not include conventional looping or conditional statements; instead, it depended on array-based operations that frequently removed the necessity for explicit control flow. For instance, the iota function (ι) produces vectors without using loops. Subsequent iterations introduced extensive control structures to clearly separate data processing from program execution flow.

The APL environment, known as a workspace, provides an interactive setting where users can define both programs and data, with data persisting independently from code. Examples include:

<syntaxhighlight lang="apl"> n ← 4 5 6 7</syntaxhighlight> Assigns the vector {4 5 6 7} to the variable n without employing loops or control statements.
<syntaxhighlight lang="apl"> n</syntaxhighlight> Outputs the current contents of vector n.
<syntaxhighlight lang="apl"> n+4</syntaxhighlight> Adds 4 to each element within n, resulting in {8 9 10 11}.
<syntaxhighlight lang="apl"> +/n</syntaxhighlight> Calculates the sum of all elements in n, producing 22.
<syntaxhighlight lang="apl"> m ← +/3+⍳4
     m</syntaxhighlight>  
Performs a combined operation: creates array [1 2 3 4], adds 3 to each element, sums these values, assigns the total to m, and then displays it. This corresponds to \(\sum_{i=1}^4 (i+3)\).

Workspaces can be stored preserving all variables, code definitions, and execution states.

APL utilizes a distinctive set of non-ASCII characters that extend classical mathematical notation, allowing for succinct SIMD-style vector functions and highly compact algorithms—such as expressing Conway's Game of Life in a single line. Theoretically, almost any computable function can be represented within one APL expression.

Because of its specialized character set, programmers often rely on keyboards featuring APL-specific keytops or alternative input methods for entering code. Although ASCII-based transliterations exist, they are seldom adopted in practice. The unique APL font includes uppercase italic letters alongside upright numerals and symbols; many providers supply custom fonts tailored for this purpose.

Proponents contend that so-called write-only code arises from poor programming habits rather than inherent language flaws. They argue that APL greatly enhances productivity by enabling faster development cycles with fewer developers compared to traditional languages like COBOL or Java. Its concise syntax is advantageous for large-scale projects by minimizing line counts. APL finds frequent application in time-critical sectors such as financial trading systems.

Terminology

APL makes a clear distinction between functions and operators. Functions accept arrays—be they variables, constants, or expressions—as inputs and produce arrays as outputs. Operators (akin to higher-order functions) take functions or arrays as parameters and generate related functions. For example, the sum function results from applying the reduction operator to the addition function; similarly, applying reduction to the maximum function yields a function that returns the largest value within a vector. In the J language, Iverson replaced the term function with verb and operator with either adverb or conjunction.

Symbols or fixed combinations representing built-in features are referred to as primitives, which are primarily functions or operators. Writing APL code involves creating non-primitive functions and sometimes operators depending on the implementation. Some primitives—such as assignment—do not classify as either functions or operators.

Several terms in APL carry meanings distinct from their interpretations in mathematics or general computer science.

Terminology of APL operators
Term Description
function An operation or mapping that accepts zero, one (right), or two (left & right) arguments—which may be scalars, arrays, or nested structures—and returns a result of comparable complexity. Functions can be:
  • Primitive: built-in and represented by a single symbol;
  • Defined: named aggregates of program statements;
  • Derived: formed by combining an operator with its arguments.
array A data entity consisting of zero or more orthogonal dimensions arranged in row-major order; each element is either a primitive scalar or another array.
niladic Accepts no arguments (nullary).
monadic Requires one argument; positioned on the right for functions and on the left for operators (unary).
dyadic Necessitates both left and right arguments (binary).
ambivalent
or monadic
Applicable in either monadic or dyadic contexts, permitting omission of the left argument.
operator An operation that takes one (left) or two (left & right) arguments—either functions or arrays—and produces a new function. Operators may be:
  • Primitive: built-in and represented by a single symbol;
  • Defined: named collections of program statements.


Syntax

APL distinctly represents functions, operators, and syntactic elements, allowing for precise articulation of advanced language capabilities and tools for experimentation.

Hello, world

This outputs the phrase "Hello, world":

<syntaxhighlight lang="apl"> 'Hello, world' </syntaxhighlight>

By default, APL displays the result of any expression that is not part of an assignment or function invocation.

Exponentiation

In APL, exponentiation is performed using , raising 2 to the third power (unlike operators such as or found in other languages). While many programming languages use to denote multiplication (), APL employs . If the base is omitted, for example , APL interprets this as raising the constant e to the given exponent rather than producing a syntax error.

Simple statistics

Given an array , its mean can be determined by . Here, returns the count of elements, sums them up, and division calculates the average. The standard deviation is computed through:


This formula can be encapsulated within a function for repeated use. Since assignment functions as an operator in APL, values can be assigned during expression evaluation, such as:


Pick 6 lottery numbers

The following code snippet generates six distinct random integers between 1 and 40 and sorts them in ascending order:

<syntaxhighlight lang="apl"> x[⍋x←6?40] </syntaxhighlight>

This example incorporates several core APL primitives:

  • The dyadic operator ? (deal) produces six unique random integers from 1 to 40.
  • The generated vector is stored in variable x.
  • The monadic ⍋ returns indices that would sort x in ascending order.
  • These indices are then used to reorder x, yielding a sorted sequence.

If no function consumes the output explicitly, APL automatically displays it.

The monadic form of ?, known as roll, produces a single random integer between 1 and its argument (for example, ?20 simulates rolling a twenty-sided die).

Prime numbers

This expression identifies all prime numbers up to a limit R with computational complexity of <math>O(R^2)\,\!</math> (in Big O notation):

<syntaxhighlight lang="apl"> (~R∊R∘.×R)/R←1↓⍳R </syntaxhighlight>

Evaluated from right to left:

  • The Iota operator ⍳ generates a vector from 1 through R.
  • The first element is dropped (1↓⍳R) leaving 2 3 4 ... R.
  • This vector is assigned to variable R.
  • An outer product multiplication matrix of R with itself is created (R∘.×R).
  • A membership test (∈) marks which elements of R appear in this multiplication table.
  • Negation (∼) flips these markers to identify primes.
  • Elements in R corresponding to true values are extracted, producing all primes up to R.

Sorting

To sort a list of words stored in matrix X by their length, the following expression is used:

<syntaxhighlight lang="apl"> X[⍋X+.≠' ';] </syntaxhighlight>

Game of Life

The "life" function written in Dyalog APL calculates the subsequent generation of a Boolean matrix according to Conway's Game of Life, illustrating how APL succinctly implements complex algorithms:

<syntaxhighlight lang="apl"> life ← {⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ∘.⊖ ¯1 0 1 ⌽¨ ⊂⍵} </syntaxhighlight>

Stripping HTML tags

In this illustration, Dyalog assigns a string containing HTML markup to the variable txt and applies an APL expression to eliminate all HTML tags:

<syntaxhighlight lang="apl">

txt←'<html><body>

This is emphasized text.

</body></html>'

     {⍵ /⍨ ~{⍵∨≠\⍵}⍵∊'<>'} txt

This is emphasized text. </syntaxhighlight>

Origin of the name

The term APL derives from Iverson's publication A Programming Language, which primarily presents Iverson's mathematical notation rather than the language itself. The designation specifically refers to actual language implementations, beginning with APL\360.

The name was introduced by Adin Falkoff in 1966 during the development phase of APL\360 at IBM:

APL has occasionally been reinterpreted as an acronym for Array Programming Language or Array Processing Language, serving as a backronym.

From 1969 through 2010, APL vendors collaborated via joint conferences and often distributed promotional items featuring APL-related imagery or vendor emblems. Common motifs included apples (a play on the letters "APL") and the character , associated with the traditional APL keyboard layout.

Despite these efforts, no widely accepted vendor-neutral logo was established. While other languages such as Fortran adopted official logos (Fortran introduced one in 2020), the British APL Association initiated a campaign in late 2021 to create a standardized logo for APL. After community voting and input, a design was chosen in May 2022.

Applications

APL finds use in a wide array of fields including financial and insurance software development, artificial intelligence, neural network modeling, and robotics. Its concise symbolic syntax and array-centric approach attract domain specialists and data scientists who may not possess conventional programming backgrounds.

The language is particularly effective for image processing and computer animation tasks, where matrix computations represent graphical transformations. The early visual effects company Digital Effects created an APL-based system called Visions, which was utilized in television advertisements and the 1982 movie Tron. More recently, the Stormwind boating simulator incorporates APL for its essential logic, graphics pipeline integration, and physics engine modules.

Currently, APL supports numerous commercial and scientific domains such as investment management, healthcare applications, and DNA analysis technologies. Its flexibility continues to meet the demands of niche markets requiring swift prototyping and sophisticated data manipulation.

APL\360

The inaugural implementation featuring recognizable APL symbols was APL\360, developed for the IBM System/360 and finalized in November 1966. Initially restricted to IBM internal use, its creators—Larry Breed, Dick Lathwell, and Roger Moore—were honored with the Grace Murray Hopper Award by the Association for Computing Machinery (ACM) in 1973 for pioneering advances in simplicity, efficiency, reliability, and interactive response times.

In 1975, the IBM 5100 microcomputer incorporated APL\360 as one of two built-in interpreted languages stored in ROM, alongside a keyboard and display supporting its special character set.

Significant developments following this included CMS/APL, which utilized virtual memory provided by the CMS, as well as APLSV that introduced shared variables along with system variables and functions. Over time, APL\360 was ported to platforms such as the IBM System/370 and VSPC, remaining in use until its final release in 1983 when it was succeeded by APL2.

APL\1130

Introduced in 1968, APL\1130 was IBM’s first APL system made accessible to the public, designed specifically for the IBM 1130 computer. It quickly became IBM’s most widely distributed software within the IBM Type-III Library.

APL*Plus and Sharp APL

APL*Plus and Sharp APL represent advanced iterations of APL\360, incorporating business-oriented features such as enhanced data formatting and support for storing APL arrays in external files. These versions were developed collaboratively by two firms that employed original developers from IBM’s APL\360 team, aiming to broaden commercial usage.

The two companies involved were I. P. Sharp Associates (IPSA), established in 1964 by Ian Sharp, Roger Moore, and others as an APL\360 service provider, and STSC, founded in 1969 by Lawrence Breed and associates to focus on time-sharing and consulting services. Initially, they cooperated on APL*Plus but eventually created distinct products: STSC continued with APL*Plus while IPSA developed Sharp APL. STSC adapted APL*Plus for various platforms including VAX 11,[1] PC, and UNIX systems, whereas IPSA tailored Sharp APL for personal computers using PC-XT/360 hardware. In 1993, Soliton Incorporated was formed to maintain Sharp APL and later transformed it into SAX (Sharp APL for Unix). , APL*Plus persists under the name APL2000 APL+Win.

In recognition of their contributions, Ian Sharp and Dan Dyer from STSC jointly received the Kenneth E. Iverson Award for Outstanding Contribution to APL in 1985.

APL2

Starting development in 1971 and released in 1984, IBM’s APL2 was a comprehensive redesign of the original APL language that introduced major improvements, most notably the ability to handle nested or irregularly shaped arrays. The entire team behind the APL2 Products and Services was honored with the Iverson Award in 2007. In 2021, ownership of APL2 transferred to Log-On Software, which currently develops and markets it under the name Log-On APL2.

APLGOL

APL introduced structured programming elements with the release of APLGOL in 1972. This variant added control structures for improved flow between statements, conditional execution capabilities, and more explicit algorithm representation. Hewlett-Packard implemented this language in 1977.

Dyalog APL

Dyalog Ltd., a British company, launched Dyalog APL in 1983 as an extension of APL2 that supports object-oriented, functional, and tacit programming styles. By 2018, it was compatible with operating systems including AIX, Linux (with Raspberry Pi support), macOS, and Windows. Personal and non-commercial licenses are available free of charge.

Key contributors John Scholes and Peter Donnelly were awarded the Iverson Award in 1995 for their interpreter development efforts. Subsequently, CEO Gitte Christensen and CXO Morten Kromberg received the same award in 2016 recognizing their leadership roles.

NARS2000

NARS2000 is an open-source interpreter for APL created by Bob Smith, a notable developer from STSC during the 1970s and 1980s. It offers advanced features along with new data types and runs natively on Microsoft Windows, as well as on other platforms through Wine. Its name is derived from NARS (Nested Arrays Research System), a tool from the 1980s.

APLX

First released in 2002 by UK-based MicroAPL, APLX is a cross-platform dialect derived from APL2 with additional enhancements. Although it is no longer commercially sold or actively developed, Dyalog now distributes it free of charge.

York APL

Originating at York University in Ontario around 1968 for IBM 360 mainframes, York APL distinguished itself from APL\360 by assigning a "shape" (ρ) value of 1 to scalars instead of 0. This adjustment streamlined the development of functions handling both scalar and vector data.

GNU APL

GNU APL offers a free version of Extended APL compliant with ISO/IEC 13751:2001 (APL2). It operates on Linux, macOS, BSD systems, and Windows—either through Cygwin for complete functionality or as a native 64-bit executable with limited system capabilities. Created by Jürgen Sauermann, GNU APL internally employs Unicode and supports scripting capabilities.

Notably, Richard Stallman, the founder of the GNU Project, was an early adopter of APL, having developed a text editor in the language as a high school student in 1969.

Interpretation and compilation of APL

APL is primarily an interpreted language characterized by weak typing, which presents challenges for compilation. Nonetheless, its fundamental array-based data structure facilitates performance improvements via parallel processing and parallel computing techniques. These advantages extend to applications involving massive parallelism and very-large-scale integration (VLSI) design. Since its creation, APL has been acknowledged as a high-performance language, excelling in executing complex matrix computations rapidly due to its intrinsic array operations.

Despite this reputation, pure interpretation is uncommon; many implementations employ full or partial compilation strategies to enhance efficiency.

Idiom recognition

Most APL interpreters incorporate idiom recognition, enabling them to process common idioms as single atomic operations. For instance, the idiom BV/⍳⍴A—with BV representing a Boolean vector and A an array—is executed in one step to prevent generating intermediate arrays.

Optimised bytecode

Because of APL’s weak typing system, identifiers can denote arrays, functions, or operators, necessitating runtime type analysis and syntax verification. However, in certain situations, anticipated types can be inferred beforehand, allowing the generation of bytecode that reduces runtime overhead. This bytecode undergoes optimization using techniques such as constant folding and common subexpression elimination. The interpreter executes this optimized bytecode when the inferred assumptions remain valid. Dyalog APL is an example of an implementation supporting such optimized bytecode.

Compilation

Efforts to compile APL date back to the language's early days; the initial compiler was Burroughs APL-700, introduced circa 1971. Achieving compilation requires placing constraints on the language's flexibility. The APEX research compiler, developed by Robert Bernecky, is distributed under the GNU General Public License. Additionally, the STSC APL Compiler functions as a hybrid system combining bytecode optimization with compilation—it translates functions into machine code when sub-functions and globals are declared while relying on an interpreter runtime library for other procedures.

Standards

The standardization of APL is overseen by the American National Standards Institute (ANSI) committee X3J10 as well as by the International Organization for Standardization (ISO) and International Electrotechnical Commission (IEC) through ISO/IEC Joint Technical Committee 1 Subcommittee 22 Working Group 3. The foundational Core APL specification is documented in ISO 8485:1989, while Extended APL is defined within ISO/IEC 13751:2001.

See also

Further reading

Video

  • – interview from 1974 featuring the original creators of APL.
  • – live demonstration of APL conducted in 1975 by Professor Bob Spence at Imperial College London.
  • – a 2009 tutorial by John Scholes from Dyalog Ltd., showcasing a one-line APL implementation of Conway's Game of Life.
  • – introductory presentation on APL by Graeme Robertson from 2009.

External links

  • TryAPL.org, an interactive online introduction to APL
  • APL2C, a collection of links to APL compilers
  1. ↑ ...