APL programming language
Category:Programming languages \n
APL (for
A Programming Language, or sometimes\n
Array Processing Language) is a
programming language invented in
1962 by
Kenneth E. Iverson while at
Harvard University. Iverson received the
Turing Award in
1979 for his work.
- "APL, in which you can write a program to simulate shuffling a deck of cards and then dealing them out to several players in four characters, none of which appear on a standard keyboard."\n:— David Given
Within its chosen domain, APL is an extremely powerful, expressive and concise programming language. It was originally created as a way to express
mathematical notation in a rigorous way that could be interpreted by a computer. It is easy to learn but APL programs can take some time to understand. Unlike traditional structured programming languages, code in APL is typically structured as chains of monadic or
dyadic operators acting on arrays. Because APL has so many nonstandard operators, APL does not have
operator precedence. The original APL did not have
control structuress (loops, if-then-else), but the array operations it included could simulate
structured programming constructs. For example, the iota operator (which yields an array from 1 to N) can simulate for-loop
iteration. APL systems are typically interactive.
The APL environment is called a
workspace. In a workspace the user can define programs and data, i.e. the data values exists 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.
-
Print the values 8 9 10 11
-
Print the sum of N, i.e. 22
\nThe user can save the workspace with all values and programs. In any case, the programs are not
compiled but
interpreted.
APL is notorious 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. Because of its condensed nature and non-standard characters, APL has sometimes been termed a "
write-only language", and reading an APL program can feel like decoding an alien tongue. Because of the unusual
character set, many programmers used special APL
keyboardss in the production of APL code. Nowadays there are various ways to write APL code using only ASCII characters.
Iverson designed a successor to APL called
J which\nuses ASCII "natively". So far there is a sole single source of J implementations:
http://www.jsoftware.com/ Other programming languages offer functionality similar to APL.
A+ is an
open source programming language with many commands identical to APL.
Here's a
"Hello World" program in APL:
-
Here's how you would write a program that would
sort a word list stored in vector X according to word length:
X[X+.¬' ';]
Here's a program that finds all
prime numbers from 1 to R:
-
Here's how to read it, from right to left:
- creates a vector containing integers from 1 to R (if R = 6 at the beginning of the program, is 1 2 3 4 5 6)\n#Drop first element of this vector ( function), i.e. 1. So is 2 3 4 5 6\n#Set R to the vector (, assignment operator)\n#Generate outer product of R multiplied by R, i.e. a matrix which is the multiplication table of R by R (function)\n#Build a vector the same length as R with 1 in each place where the corresponding number in R is in the outer product matrix (, set inclusion function), i.e. 0 0 1 0 1\n#Logically negate the values in the vector (change zeros to ones and ones to zeros) (, negation function), i.e. 1 1 0 1 0\n#Select the items in R for which the corresponding element is 1 ( function), i.e. 2 3 5
Here's the equivalent in
Perl (another "write-only" language):\n perl -le '$_ = 1; (1 x $_) !~ /^(11+)\\1+$/ && print while $_++'
APL symbols and keyboard layout
All APL symbols are present in Unicode:
\nIt may be required to significantly reconfigure your browser in order to display Unicode fonts.
\n{|\n|- align=center\n|' || ( || ) || + || , || - || . || / || : || ; || < || = || > || ? || [ || ]\n|- align=center\n| \\ || _ ||¨ || ¯ || × || ÷ || ← || ↑ || → || ↓ ||∆ || ∇ || ∘ || ∣ || ∧ || ∨\n|- align=center\n| ∩ || ∪ || ∼ || ≠ || ≤ || ≥ || ≬ || ⊂ || ⊃ || ⌈ ||⌊ || ⊤ || ⊥ || ⋆ || ⌶ || ⌷\n|- align=center\n| ⌸ || ⌹ || ⌺ || ⌻ || ⌼ || ⌽ || ⌾ || ⌿ || ⍀ || ⍁ || ⍂||⍃ || ⍄ || ⍅ || ⍆ || ⍇\n|- align=center\n| ⍈ || ⍉ || ⍊ || ⍋ || ⍌ || ⍍ || ⍎ || ⍏ || ⍐ || ⍑ || ⍒ ||⍓ || ⍔ || ⍕ || ⍖ || ⍗\n|- align=center\n| ⍘ || ⍙ || ⍚ || ⍛ || ⍜ || ⍝ || ⍞ || ⍟ || ⍠ || ⍡ || ⍢ ||⍣ || ⍤ || ⍥ || ⍦ || ⍧\n|- align=center\n| ⍨ || ⍩ || ⍪ || ⍫ || ⍬ || ⍭ || ⍮ || ⍯ || ⍰ || ⍱ || ⍲ ||⍳ || ⍴ || ⍵ || ⍶ || ⍷\n|-align=center\n| ⍸ || ⍹ || ⍺ || ⎕ || ○\n|}\n
References
\n* A Programming Language (1962), by Kenneth E. Iverson\n* History of Programming Languages, chapter 14
External links
\n*APL - A Programming Language\n*APL info\n*APL2C Compiler
\n\n\n\n\n\n