APL - Introduction
We now turn our attention to APL, a unique symbolic programming language that can be run on MTS.
APL, A Programming Language
The concepts behind APL came from work done by Kenneth E. Iverson at Harvard in the late 1950s. He wrote the book A Programming Language from which APL got its name. He moved to IBM in the early 1960s and helped produce the first working version of the language. IBM distributed versions of APL in the 1960s and 1970s, during which time the language was refined into APL2. Implementations were made for other architectures, including microcomputers in the 1980s.
APL is unique for its use of special symbols for functions and the ability to operate on multi-dimensional arrays. Put together, this allows a small amount of code to do a large amount of work. An example (from Wikipedia to compute the prime numbers from 1 to R:
(~R∊R∘.×R)/R←1↓ιR
APL on MTS
The version of APL on MTS is based on APL\360, developed at IBM in the late 1960s. This was adapted to use the local MTS file system and devices, and portions for multi-user support were removed as they were not needed on MTS. Later versions of IBM APL did run on MTS but are not available on the D6 distribution due to copyright reasons.
APL symbols were supported using teletypewriters with a custom keyboard layout and typeballs that could display these symbols on paper.
Not all users would have this special teletypwriter, so APL supports the standard keyboard and printer character set using transliterations for symbols. For example, the divide operator ÷
is replaced with /
and the ceiling operator ⌈
, which finds the maximum of its arguments, is replaced with either $MA
or $CE
.
The hardware used by MTS for APL is not supported on Hercules so we will need to use these transliterations when running MTS under emulation.
Prerequisites
Unlike other languages seen so far, we do need to set up APL before using it by installing it from the D5 tapes. The below method was adapted from work done by user halfmeg on the H390-MTS list.
Start with a regular D6.0 setup as described in this guide. Ensure that MTS is not running before following these steps.
Get a copy of the D5 tapes from Bitsavers and extract into a temporary directory.
Locate the files d5.0t1.aws
and d5.0t2.aws
under the extraction directory and copy these to the Tapes
directory under your MTS install
Edit your hercules.cnf
and add these lines. These tape devices are unused in the stock D6.0 install; if you have already assigned these for your own use then change the device names here and in the instructions below.
# Add D5 tapes needed to restore APL
018B 3420 Tapes/d5.0t1.aws ro # T90B, D5.0T1
018C 3420 Tapes/d5.0t2.aws ro # T90C, D5.0T2
The batch instructions to restore APL from these disks is available as a card deck from my github repo on MTS languages. Download that file and copy it to Units/RDR1.txt
under your Hercules install, replacing the existing file. Note that the whitespace in the first line is important, so clone the git repo or download the file as raw text.
Start up MTS as normal, including HASP. When it is running, type devinit c
from the Hercules console to load the card deck. You should see the below printed on the MTS console if this worked.
00051 MTS **** Remove tape from T90B (6250 BPI)
00051 MTS **** Remove tape from T90C (6250 BPI)
The output from the batch job can be found on the printer in Hercules file Units/PTR2.txt
. Examine it for any errors; you can ignore lines like You restored files saved before FEB. 22, 1988
. You should see that job extracted files from the tape and set permissions appropriately.
Finally, test that it works by logging into a normal user account (eg ST01) and running
$run *APL,par=sp,noball
The APL start up message should appear. Type )LIB 1
and you should see this listing of library files:
ADVANCEDE
APLCOURSE
CLASS
NEWS
PLOTFORMA
TYPEDRILL
WSFNS
EIGENVALU
BRFNS
Type )OFF
to exit APL.
When you next shutdown MTS, you can comment out the two D5.0 tapes in hercules.cnf
to free up these devices for future use.
Running a program using *APL
*APL
is an interactive environment where you can enter expressions and program lines. To start APL, run *APL
with the parameters sp
(to print spaces after each operator) and noball
(to indicate we are not using the special APL typeball.
APL prompts with six leading spaces. You can enter expressions and get results back immediately, aligned in column 1.
System commands start with )
. )SOURCE
will read lines from a given text file and execute them. )CONTINUE
will save a copy of the current workspace to a binary file which will automatically be loaded next time you start APL. )OFF
will exit APL.
Hello world
As an example, here’s a simple program to print ‘Hello, world!’ five times. This uses a simple loop - there’s probably a more concise way to do this.
First, create a file called hello.apl
containing the following lines:
"HELLO
N=1
'Hello, world!'
N=N+1
$GO 2 * N $LE 5
"
Then start APL and load the text file:
# $run *apl par=sp,noball
# Execution begins 16:30:56
SAVED 16.30.28 05%27%17
)SOURCE HELLO.APL
After you enter the )SOURCE
command APL will read the file but will not prompt you it has completed. Press the ATTN
key to interrupt APL and return control to you. You can then enter HELLO
to run the loaded program:
HELLO
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
)OFF
16.31.16 05%27%17 CONTINUE
16.31.16 05%27%17
CONNECTED 0.00.19
CPU TIME 0.00.00
# Execution terminated 16:31:15 T=0.034
In the next post we’ll look at the APL language in more detail.
Further information
IBM’s APL\360 Primer is a great first read as it introduces the APL\360 system and APL language in a tutorial form. The APL\360 User’s Manual can then be consulted for more in-depth information.
A classic introduction to APL is “APL 360: An Interactive Approach” by Gillman and Rose. A copy can be found at the Software Preservation Group of the Computer History Museum.
UM Computing Center Memo 382 is a guide to the implementation of APL\360 on MTS. I recommend reading the printed copy of this memo from the above source as it includes the hand written APL symbols missing on the source copy.