APL (for A Programming Language) is an array programming language based on a notation invented in 1957 by Kenneth E. Iverson while at Harvard University. It originated in an attempt to provide consistent notation for the teaching and analysis of topics related to the application of computers. The notation was later used to describe the IBM System/360 machine architecture, a description much more concise and exact than the existing documentation and revealing several previously unnoticed problems. Then, a Selectric typeball was made to write a linear representation of this notation. In 1964, a subset of the notation was implemented as a programming language.
Iverson published his notation in 1962 in a book titled A Programming Language and APL got its name from the title of this book. Iverson received the Turing Award in 1979 for his work. As with all programming languages that have had several decades of continual use, APL has changed significantly from the notation described by Iverson in his book. One thing that has remained constant is that APL is interpretive and interactive, features much appreciated by its users. Conversely, its initial lack of support for both structured and modular programming has been solved by all the modern APL incarnations. One much criticized aspect of APL is the use of a special character set (see Character set below.) These characters have all been incorporated into Unicode, which is now the base character set of several APL products. Iverson later reworked APL into a language called J which not only greatly increases expressive power but also uses pure ASCII instead of a special character set.
The APL environment is called a workspace. In a workspace the user can define programs and data, i.e. the data values exist also outside the programs, and the user can manipulate the data without the necessity to define a program, for example:
Assign the vector values 4 5 6 7 to N.
Add 4 to all values (giving 8 9 10 11) and Print them (absence of the assignment arrow means "show").
Print the sum of N, i.e. 22.
The user can save the workspace with all values, programs and execution status. In any case, the programs are usually not compiled but interpreted. A commercial compiler was brought to market by STSC (now Manugistics).
APL is well-known for its use of a set of non-ASCII symbols that are an extension of traditional arithmetic and algebraic notation. These cryptic symbols, some have joked, make it possible to construct an entire air traffic control system in two lines of code. Indeed, in some versions of APL, it is theoretically possible to express any computable function in one expression, that is in one line of code. You can use the other line for I/O, or constructing a GUI. Because of its condensed nature and non-standard characters, APL has sometimes been termed a "write-only language", and reading an APL program can at first feel like decoding an alien tongue. Because of the unusual character set, many programmers used special APL keyboards in the production of APL code. Nowadays there are various ways to write APL code using only ASCII characters. Indeed most if not all modern implementations use the standard keyboard, displaying APL symbols by use of a particular font.
Advocates of APL claim that the examples of "write-only" code are almost invariably examples of poor programming practice or novice mistakes, which can occur in any language.
APL has perhaps had an unusually high percentage of users who are subject-matter experts who know some APL, rather than professional programmers who know something about a subject.
Iverson designed a successor to APL called J which uses ASCII "natively". So far there is only a single source of J implementations: http://www.jsoftware.com/ Other programming languages offer functionality similar to APL. A+ is a programming language with many commands identical to APL, and with an open source implementation.
Here's a program that finds all prime numbers from 1 to R in time and space both O(R2):
Here's how to read it, from right to left:
A widely cited paper "The APL Machine" perpetuated the myth that APL made pervasive use of lazy evaluation where calculations would not actually be performed until the results were needed and then only those calculations strictly required. Although this technique was used by just a few implementations, it embodies the language's best survival mechanism: not specifying the order of scalar operations. Even as eventually standardized by X3J10, APL is so highly data-parallel, it gives language implementers immense freedom to schedule operations as efficiently as possible. As computer innovations such as cache memory, and SIMD execution became commercially available, APL programs ported with little extra effort spent re-optimizing low-level details.
APL also identifies those features built into the language, and represented by a symbol, or a fixed combination of symbols, as primitives. Most primitives are either functions or operators. Coding APL is largely a process of writing non-primitive functions and (in some dialects of APL) operators. However a few primitives are considered to be neither functions nor operators, most noticeably assignment.
Note the mnemonics associating an APL character with a letter: question mark on Q, power on P, rho on R, base value on B, eNcode on N, modulus on M and so on. This makes it easier for an English-language speaker to type APL on a non-APL keyboard providing one has visual feedback on one's screen.
A more up to date keyboard diagram, applicable for APL2 and other modern implementations, is available: Union layout for windows.
All APL symbols are present in Unicode:
It may be required to significantly reconfigure your browser in order to display Unicode fonts.
Programming languages | Array programming languages | Functional languages | Dynamic programming languages | APL programming language family | .NET programming languages
APL | APL | APL (Programmiersprache) | APL | APL | APL (langage) | APL | APL | APL | APL (język programowania) | APL | АПЛ (язык программирования) | APL (ohjelmointikieli) | APL | APL
This article is licensed under the GNU Free Documentation License.
It uses material from the
"APL programming language".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world