APLOxy Implementation

APL Detalis

APL is a programming language developed by Kenneth E. Iverson in the early 1960's. It has very strong array processing abilities and is easy to recognize because of its many special characters. The keyboard shown couldn't accommodate all APL characters, so some had to be composed over the previous character using backspace.

Ideally, APL expressions are entered using a special keyboard and display (or printer) such as this one. I first learned APL in 1977 during high school on a CDC 6600 mainframe, using a Model 33 Teletype, a Tektronix 4013 APL terminal and a DEC LA36 Decwriter II Terminal with an APL font. I am indebted to Dr. John Werth and the mathematics department at the University of Nevada in Las Vegas for allowing me to use their facilities free of charge during this period.

The Model 33 Teletype was connected to a mainframe with a 110 baud acoustic coupler. The user entered special APL symbols as three character codes. For example, the iota symbol (above the I key) was $IO. This was much harder to read than normal APL and I always favored the Tektronix or Decwriter terminals, which supported the APL character set and 300 baud.

In College I didn't have access to APL. In my junior year I wrote the skeleton of an APL Interpreter on a Prime microcomputer. I chose to code mostly in the Prime assembly language (FORTRAN would have been my other option). I only implemented a few operators. In 2005 I revisited APL and spent one month writing a fully functional APL Interpreter call APLOxy (see the button on the left).

For an example of the power and pitfalls of APL, consider the programs below that I wrote in 1977. The two programs implement a version of the game Reverse. The user is asked to put a list of numbers in order by swapping one pair at a time. The upper program (REV) is verbose and relatively easy to follow. The lower program (REVERSE) is the same program (minus English prompts) implemented in one line of APL. It's an example of how APL can be almost impossible to understand. The printout came from a Decwriter terminal.

Slightly crumpled dot matix printout showing a documented and readable APL program and an equivalent program using a string of APL gibberish