[net.lang.apl] Report on APL/11

otto (11/30/82)

This is just a note to let people know that I am about to release in this
newsgroup my detailed reactions to using the APL/11 program available from
Purdue for PDP-11's and VAXen.  This soon-to-come analysis will include a
listing of the log I have been keeping while using this APL program.
However, I thought it would be useful to present my general reaction to this
program now even in the absence of detailed support.  Therefore, ...

I am pleased to have in APL/11 an implementaion of APL that works reasonably
well.  I have an APL terminal, and it is quite nice to get into the program
from UNIX(tm), flip it into APL mode, and use the program as a powerful desk
calculator. The typical, middle-of-the-road kind of things that one usually
wants to do with APL primitives work correctly in this use, and there is
quite a lot of power at ones fingertips with this program.

However, this APL is non-standard in many ways -- ways that become important
when function definition is employed.  At such a time more precise,
complete, and exacting use of the language is required. I have found that
APL/11 misbehaves under many boundary conditions which become evident when
workspaces are being defined with collections of functions.

A typical example is the following: a useful idiom in APL for telling if an
array A is character or numeric is

                       ' ' = 1 take 0 take ,A

It returns 1 if 'A' is a character array, and 0 otherwise.  Unfortunately,
this idiom fails in APL/11 in two ways.  First, a '1 take' from a null
vector in APL/11 does *not* produce a vector of zeros or blanks, as expected
(depending on the type of the null vector). Instead, it erroneously produces
floating point numbers or non-printing characters. Secondly, there is a
non-standard restriction in APL/11 that makes

                            ' ' = 0

an illegal expression.  Thus the first expression fails -- producing an
error message -- if 'A' is numeric.  The test can be reformed into APL/11 as

               ' ' = -1 take format -1 take 2 take 1 take ,A

where all the '-' signs represent overbar characters.  However, this is
clearly more complicated than it needs to be.  It is also rather frustrating
to have to work around such non-standard difficulties because of
implementation constraints.

I have found numerous similar instances, which can best be described as
*boundary condition failures*, where primitives fail in the presence of null
vectors or multidimensional arrays but work correctly when the arguments are
garden-variety vectors.  I will present more detail about all this in my
forthcoming report to this group.

George Otto
Bell Labs, Indian Hill
----------------------

ecn-pa:bruner (12/01/82)

Unfortunately, APL\11 is a very old program (I believe it predates
V6 UNIX) and some of the problems that George Otto has mentioned
(and will mention) are very difficult to fix.  I don't remember
exactly why doing a "take" on a null vector is incorrect; at one
time you couldn't take more than the array contained (for instance

	5 take 3 rho 0

was not accepted).  I checked the code and my private log of changes
and I mentioned at the time that taking from a null didn't work.
I haven't worked on it in quite a while; it was always a peripheral
project and my thesis deadline is now 10 days away.

Anyway, the principal point of this news submission is to tell anyone
who may be interested in APL\11 that I won't be here to distribute
it anymore.  If you'd like a copy you should contact my former
major professor, Dr. Anthony P. Reeves, who is now at Cornell.  You
can reach him at "{decvax,harpo}!cornell!reeves".

--John Bruner

johnl (12/03/82)

     Here's the true scoop on so-called APL/11.  It was originally
whipped up by Ken Thompson in about two days, and I later got it, fiddled
for a week or so, and sent it out to Usenix.  It was on the first or
second Usenix tape, a long time ago.  Since then it's bounced around a
certain amount and appeared (with some wrong guesses about its origin) in
4BSD.  To make it full APL, a lot of work would be needed.  Last time I
checked, its weaknesses included:

  No terminal independence
  No labels in functions
  Kludgy function compilation which causes flakes when function
    definitions change
  No function editor
  No state indicator
  No file package
  No shared variables
  Teensy-weensy workspace (better on the vax than the 11, though)
  Dubious behavior with arguments in limiting cases (e.g. null args)

The expression evaluator is nice, so it's OK as a desk calculator but a
decided loser beyond that.  I haven't touched or looked at it in years,
so please don't ask me for fixes.

John Levine, IECC, PO Box 349, Cambridge MA 02238; (617) 491-5451
decvax!yale-co!jrl, harpo!esquire!ima!johnl, ucbvax!cbosgd!ima!johnl (uucp)
Levine@YALE (Arpa).