436 51 3MB
English Pages 11
THE EVOLUTION
OF APL
Adin D. Falkoff Kenneth E. Iverson Research Division IBM Corporation
Data Processing [6], undertaken together w~ Frederick P. Brooks, Jr., then a graduate student at Harvard. Because the work began as incidental to other work, it is difficult to pinpoint the beginning, but it was probably early 1956; the first explicit use of the language to provide communication between the designers and programmers of a complex system occurred during a leave from Harvard spent with the management consulting firm of M c K i n s e y and Company in 1957. Even after others were drawn into the development of the language, this development remained largely incidental to the work in which it was used. For example, Falkoff was first attracted to it (shortly after Iverson joined IBM in 1960) by its use as a tool in his work in parallel search memories [7], and in 196~ we began to plan an implementation of the language to enhance its utility as a design tool, work which came to fruition when we were joined by Lawrence M. Breed in 1965.
This paper is a discussion of the evolution of the APL language, and it treats implementations and applications only to the extent that they appear to have exercised a major influence on that evolution. Other sources of historical information are cited in References I-3; in particular, The Design of APL [I] provides supplementary~etal~n--~he-~easons behind many of the design decisions made in the development of the language. Readers requiring background on the c u r r e n t definition of the language should consult APL Language [4]. Although we have attempted to confirm our recollections by reference to written documents and to the memories of our colleagues, this remains a personal view which the reader should perhaps supplement by consulting the references provided. In particular, much information about individual contributions will be found in the Appendix to The Design of APL [i], and in the Acknowledge--~ent---s i'~A Programming Language [I0] and in A P L \ 3 6 0 User's Manual [233. Because Reference ~-~ may ~o--l~-ger be readily available, the acknowledgements from it are reprinted in Appendix A.
The most important influences in the early phase appear to be Iverson's background in mathematics, his thesis work in the machine solutions of linear differential equations [8] for an economic input-output model proposed by Professor Wassily Leontief (who, w i t h Professor Howard Aiken, served as thesis adviser), and Professor Aiken's interest in the newly-developing field of commercial applications of computers. Falkoff brought to the work a background in engineering and technical development, with experience in a number of disciplines, which had left him convinced of the overriding importance of simplicity, particularly in a field as subject to complication as data processing.
McDonnell's recent paper on the development of the notation for the circular functions [5] shows that the detailed evolution of any one facet of the language can be both interesting and illuminating. Too much detail in the present paper would, however, tend to obscure the main points, and we have therefore limited ourselves to one such example. We can only hope that other contributors will publish their views on the detailed developments of other facets of the language, and on the development of various applications of it.
A l t h o u g h the evolution has been continuous, it will be helpful to distinguish four phases according to the major use or preoccupation of the period: academic use (to 1960), machine description (1961-1963), implementation (1964-1968), and systems (after 1968).
The development of the language was first begun by Iverson as a tool for describing and analyzing various topics in data processing, for use in teaching classes, and in writing a book, Automatic
© 1978 Association for Computing Machinery, Inc.
47
ACM SIGPLAN Notices, Vol. 13, No. 8, August 1978
I.
ACADEMIC
part of the period is best seen by comparing references 9 and 10. This c o m p a r i s o n shows that r e d u c t i o n and inner and outer product were all i n t r o d u c e d in " that p - ~ o ~ , although not then r e c o g n i z e d as a class later called operators. It also shows that s p e c i f i c a t i o n was o r i g i n a l l y (in R e f e r e n c e 9) denoted by placing the specified name at the right, as in P+Q+Z. The arguments (due in part to F.P. Brooks, Jr.) w h i c h led to the p r e s e n t form (Z÷P+Q) were that it better c o n f o r m e d to the m a t h e m a t i c a l form Z=P+Q, and that in reading a program, any b a c k w a r d r e f e r e n c e to d e t e r m i n e how a given variable was specified w o u l d be f a c i l i t a t e d if the s p e c i f i e d v a r i a b l e s were aligned at the left margin. What this c o m p a r i s o n does not show is the removal of a number of special c o m p a r i s o n functions (such as the c o m p a r i s o n of a vector w i t h each row of a matrix) w h i c h were seen to be u n n e c e s s a r y w h e n the power of the inner p r o d u c t b e g a n to be appreciated, as in the e x p r e s s i o n MA.=V. This removal provides one example of the s i m p l i f i c a t i o n of the language p r o d u c e d by generalizations.
USE
The machine p r o g r a m m i n g required in Iverson's thesis w o r k was directed at the d e v e l o p m e n t of a set of subroutines designed to permit c o n v e n i e n t e x p e r i m e n t a t i o n w i t h a v a r i e t y of m a t h e m a t i c a l methods. This i m p l e m e n t a t i o n experience led to an emphasis on implementable language constructs, and to an u n d e r s t a n d i n g of the role of the r e p r e s e n t a t i o n of data.
itself
The m a t h e m a t i c a l b a c k g r o u n d shows in a variety of ways, notably:
I. In the use of functions w i t h explicit arguments and explicit results; even the relations (< ~ = ~ > ~) are treated as such functions. 2. In the use of logical functions and logical variables. For example, the c o m p r e s s i o n function (denoted by /) uses as one argument a logical vector w h i c h is, in effect, the c h a r a c t e r i s t i c vector of the subset selected by compression. 3. In the use of concepts and t e r m i n o l o g y from tensor analysis, as in inner product and outer p r o d u c t and in t ~ use of rank fort ~ ~-~ionality" of an array, a n d in the t r e a t m e n t of a scalar as an array of rank zero.
2.
MACHINE
DESCRIPTION
The m a c h i n e d e s c r i p t i o n phase was m a r k e d by the complete or partial d e s c r i p t i o n of a number of computer systems. The first use of the language to describe a complete c o m p u t i n g system was b e g u n in early 1962 w h e n Falkoff d i s c u s s e d w i t h Dr. W.C. Carter his w o r k in the s t a n d a r d i z a t i o n of the i n s t r u c t i o n set for the m a c h i n e s that were to become the IBM System/360 family. Falkoff agreed to u n d e r t a k e a formal d e s c r i p t i o n of the m a c h i n e language, largely as a v e h i c l e for d e m o n s t r a t i n g how parallel p r o c e s s e s could be r i g o r o u s l y represented. He was later joined in this w o r k by Iverson w h e n he returned from a short leave at Harvard, and still later by E.H. Sussenguth. This w o r k was p u b l i s h e d as "A Formal D e s c r i p t i o n of System/360" [13].
4. In the emphasis on generality. For example, the g e n e r a l i z a t i o n s of summation (by F/), of inner product (by F.G), and of outer p r o d u c t (by o.F) extended the utility of these functions far b e y o n d their o r i g i n a l area of application. 5. In the emphasis on identities (already evident in [93) w h i c h makes the language more useful for analytic purposes, and w h i c h leads to a u n i f o r m t r e a t m e n t of special cases as, for example, the d e f i n i t i o n of the reduction of an empty vector, first given in P r o g r a m m i n g Language [I0]. In 1954 Harvard U n i v e r s i t y p u b l i s h e d an a n n o u n c e m e n t Jill of a n e w graduate p r o g r a m in A u t o m a t i c Data P r o c e s s i n g o r g a n i z e d by P r o f e s s o r Aiken. (The p r o g r a m was also reported in a c o n f e r e n c e on computer e d u c a t i o n [12]). Iverson was one of the new faculty a p p o i n t e d to p r o s e c u t e the program; w o r k i n g under the guidance of Professor A i k e n in the d e v e l o p m e n t of new courses p r o v i d e d a stimulus to his interest in developing notation, and the d i v e r s i t y of interests e m b r a c e d by the p r o g r a m promoted a broad v i e w of applications.
This phase was also m a r k e d by a c o n s o l i d a t i o n and r e g u l a r i z a t i o n of many aspects w h i c h had little to d o w i t h m a c h i n e description. For example, the c u m b e r s o m e d e f i n i t i o n of m a x i m u m and m i n i m u m (denoted in R e f e r e n c e 10 by U[V and U[V and e q u i v a l e n t to what w o u l d now be w r i t t e n as [/U/V and L/U/V) was replaced, at the s u g g e s t i o n of H e r b e r t Hellerman, by the p r e s e n t simple scalar functions. This s i m p l i f i c a t i o n was deemed p r a c t i c a l b e c a u s e of our increased u n d e r s t a n d i n g of the p o t e n t i a l of r e d u c t i o n and inner and outer product.
The state of the language at the end of the academic p e r i o d is best r e p r e s e n t e d by the p r e s e n t a t i o n in A P r o g r a m m i n g Language [I0], s u b m i t t e ~ for p u b l i c a t i o n in early 1961. The e v o l u t i o n in the latter
The best picture of the e v o l u t i o n in this period is given by a c o m p a r i s o n of A P r o g r a m m i n g L a n g u a g e [10] on the one hand, and "A Formal D e s c r i p t i o n of System/360" [13] and " F o r m a l i s m in P r o g r a m m i n g
48
the individual machines of the 360 family the decision as to w h a t was to be found in certain registers after the o c c u r r e n c e of certain errors, and this was done by stating that the result was to be random. R e c o g n i z i n g more general use for the function than the g e n e r a t i o n of r a n d o m logical vectors, we s u b s e q u e n t l y defined the monadic question mark function as a scalar function whose argument specified the p o p u l a t i o n from w h i c h the r a n d o m elements were to be chosen.
Languages" [I~] on the other. Using explicit page references to Reference 10, we will now give some further examples of r e g u l a r i z a t i o n during this period: I. The e l i m i n a t i o n of e m b r a c i n g symbols (such as ]XI for absolute value, [XJ for floor, and IX] for ceiling) and r e p l a c e m e n t by the leading symbol only, thus unifying the syntax for monadic functions. 2. The conscious use of a single function symbol to represent both a monadic and a dyadic function (still referred to in R e ~ e n c e 10 as unary and binary).
3.
IMPLEMENTATION
In 1964 a number of factors c o n s p i r e d to turn our a t t e n t i o n seriously to the p r o b l e m of implementation. One was the fact that the language was by now s u f f i c i e n t l y w e l l - d e f i n e d to give us some confidence in its s u i t a b i l i t y for implementation. The second was the interest of Mr. John L. Lawrence who, after managing the p u b l i c a t i o n of our d e s c r i p t i o n of System/360, asked for our c o n s u l t a t i o n in utilizing the language as a tool in his new r e s p o n s i b i l i t y (with Science Research Associates) for d e v e l o p i n g the use of computers in education. We quickly agreed w i t h Mr. Lawrence on the n e c e s s i t y for a machine i m p l e m e n t a t i o n in this work. The third was the interest of our then manager, Dr. Herbert Hellerman, who, after initiating some i m p l e m e n t a t i o n work w h i c h did not see completion, himself u n d e r t o o k an i m p l e m e n t a t i o n of an a r r a y - b a s e d language which he reported in the C o m m u n i c a t i o n s of the A C M [173. Although this work was l i ~ i t ~ in certain important respects, it did prove useful as a teaching tool and tended to c o n f i r m the feasibility of implementation.
3. The adoption of m u l t i - c h a r a c t e r names which, because of the failure (page 11) to insist on no elision of the times sign, had been p e r m i t t e d (page 10) only with a special indicator. 4. The rigorous adoption of a r i g h t - t o - l e f t order of execution which, although stated (page 8) had been violated by the u n c o n s c i o u s a p p l i c a t i o n of the familiar precedence rules of mathematics. Reasons for this choice are presented in E l e m e n t a r y Functions [15], in Berry's APL\360 Primer [163, and in The Design o ~ APL [I]. 5. The c o n c o m i t a n t d e f i n i t i o n of reduction based on a r i g h t - t o - l e f t order of execution as opposed to the opposite convention defined on page 16. 6. E l i m i n a t i o n of the r e q u i r e m e n t for parentheses surrounding an e x p r e s s i o n involving a relation (page 11). An example of the use w i t h o u t p a r e n t h e s e s occurs near the b o t t o m of page 241 of Reference 13.
Our first step was to define a character set for APL. Influenced by Dr. H e l l e r m a n ' s interest in t i m e - s h a r i n g systems, we decided to base the design on an 88-character set for the IBM 1050 terminal, which utilized the e a s i l y - i n t e r c h a n g e d Selectric~R~typing element. The design of this c h a r a c t e r - s e t exercised a s u r p r i s i n g degree of influence on the d e v e l o p m e n t of the language.
7. The e l i m i n a t i o n of implicit s p e c i f i c a t i o n of a variable (that is, the specification of some function of it, as in the e x p r e s s i o n ± S ÷ 2 on page 81), and its r e p l a c e m e n t by an explicit inverse function (T in the cited example). Perhaps the most important d e v e l o p m e n t s of this period were in the use of a c o l l e c t i o n of concurrent autonomous programs to describe a system, and the formalization of shared variables as the means of c o m m u n i c a t i o n among the programs. Again, comparisons may be made between the system of programs of Reference 13, and the more informal use of c o n c u r r e n t programs introduced on page 88 of Reference 10.
As a p r a c t i c a l m a t t e r it was clear that we w o u l d have to accept a linearization of the language (with no superscripts or subscripts) as well as a strict limit on the size of the primary character set. A l t h o u g h we expected these limitations to have a deleterious effect, and at first found u n p l e a s a n t some of the linearity forced upon us, we now feel that the changes were beneficial, and that many led to important generalizations. For example:
It is interesting to note that the need for a random function (denoted by the question mark) was first felt in d e s c r i b i n g the operation of the computer itself. The architects of the IBM System/360 wished to leave to the d i s c r e t i o n of the designers of
I. On l i n e a r i z i n g indexing we realized that the sub- and s u p e r - s c r i p t form had inhibited
49
the
entire family of (monadic) circular functions by a single dyadic function.
use of arrays of rank greater than 2, and had also inhibited the use of several levels of indexing; both inhibitions were relieved by the linear form A[I;J;K].
7. The use of m u l t i p l e fonts had to be re-examined, and this led to the r e a l i z a t i o n that certain functions were defined not in terms of the value of the argument alone, but also in terms of the form of the name of the argument. Such d e p e n d e n c e on the forms of names was removed.
2. The l i n e a r i z a t i o n of the inner and outer product notation (from MaN and M~N to M+.xN and Mo.xN) led e v e n t u a l l y to the r e c o g n i t i o n of the operator (which was now r e p r e s e n t e d by an explicit symbol, the period) as a separate and important c o m p o n e n t of the language.
We did, however, include c h a r a c t e r s w h i c h could print above and b e l o w a l p h a b e t i c s to provide for possible font distinctions. The original typing element included both the present flat underscore, and a saw-tooth one (the p r a l l t r i l l e r as shown, for example, in W e b s t e r ' s Second), and a hyphen. In practice, we found the two u n d e r s c o r e s somewhat d i f f i c u l t to distinguish, and the hyphen very d i f f i c u l t to d i s t i n g u i s h from the minus, from w h i c h it d i f f e r e d only in length. We therefore made the rather costly change of two characters, s u b s t i t u t i n g the p r e s e n t delta and del (inverted delta) for the p r a l l t r i l l e r and the hyphen.
3. L i n e a r i z a t i o n led to a r e g u l a r i z a t i o n of many f u n c t i o n s . o f two a r g u m e n t s ~ ( s u c h as N~J for ~](n) and A*B for a ~) and to the r e d e f i n i t i o n of c e r t a i n functions of two or three arguments so as to e l i m i n a t e one of the arguments. For example, 1](n) was replaced by IN, w i t h the simple e x p r e s s i o n J+iN r e p l a c i n g the original definition. Moreover, the simple form iN led to the r e c o g n i t i o n that JaiN could replace N~J (for J a scalar) and that Jo.aiN could g e n e r a l i z e NeJ in a useful manner; as a result the functions e and e were e v e n t u a l l y withdrawn.
In the p l a c e m e n t of the character set on the k e y b o a r d we were subject to a number of c o n s t r a i n t s imposed by the two forms of the IBM 2741 terminal (which d i f f e r e d in the encoding from k e y b o a r d - p o s i t i o n to e l e m e n t - p o s i t i o n ) , but w e r e able to devise a grouping of symbols w h i c h most users find easy to learn. One p l e a s a n t surprise has been the d i s c o v e r y that numbers of people who do not use APL have adopted the type element for use in m a t h e m a t i c a l typing. The first p u b l i c a t i o n of the c h a r a c t e r set appears to be in E l e m e n t a r y F u n c t i o n s [15].
4. The limitation of the character set led to a more systematic e x p l o i t a t i o n of the notion of ambiguous valence, the r e p r e s e n t a t i o n of both a monadic and a dyadic function by the same symbol. 5. The limitation of the c h a r a c t e r set led to the r e p l a c e m e n t of the two functions for the number of rows and the number of columns of an array, by the single function (denoted by p) w h i c h gave the d i m e n s i o n vector of the array. This p r o v i d e d the n e c e s s a r y e x t e n s i o n to arrays of arbitrary rank, and led to the simple e x p r e s s i o n ppA for the rank of A. The resulting notion of the d i m e n s i o n vector also led to the d e f i n i t i o n of the dyadic reshape function DpX.
I m p l e m e n t a t i o n led to a new class of questions, including the formal d e f i n i t i o n of functions, the l o c a l i z a t i o n and scope of names, and the use of tolerances in comparisons and in p r i n t i n g output. It also led to systems questions c o n c e r n i n g the e n v i r o n m e n t and its management, including the m a t t e r of libraries and certain p a r a m e t e r s such as index origin, printing precision, and p r i n t i n g width.
6. The limitation to 88 primary characters led to the important notion of c o m p o s i t e characters formed by striking one of the basic characters over another. This scheme has provided a supply of e a s i l y - r e a d and e a s i l y - w r i t t e n symbols w h i c h were needed as the language d e v e l o p e d further. For example, the quad, overbar, and circle were included not for specific purposes but because they could be used to o v e r s t r i k e many characters. The overbar by itself also proved v a l u a b l e for the r e p r e s e n t a t i o n of negative numbers, and the circle proved c o n v e n i e n t in carrying out the idea, p r o p o s e d by E.E. McDonnell, of r e p r e s e n t i n g the
Two early d e c i s i o n s set the tone of the i m p l e m e n t a t i o n work: I) The i m p l e m e n t a t i o n was to be experimental, w i t h primary emphasis on f l e x i b i l i t y to p e r m i t e x p e r i m e n t a t i o n w i t h language concepts, and with q u e s t i o n s of e x e c u t i o n e f f i c i e n c y subordinated, and 2) The language was to be c o m p r o m i s e d as little as possible by machine considerations. These c o n s i d e r a t i o n s led Breed and P.S. Abrams (both of w h o m had been a t t r a c t e d to our w o r k by R e f e r e n c e 13) to
50
p r o p o s e and b u i l d an i n t e r p r e t i v e i m p l e m e n t a t i o n in the s u m m e r of 1965. This was a b a t c h s y s t e m w i t h p u n c h e d c a r d input, u s i n g a m u l t i - c h a r a c t e r e n c o d i n g of the p r i m i t i v e f u n c t i o n symbols. It ran on the IBM 7090 m a c h i n e and we w e r e l a t e r a b l e to e x p e r i m e n t w i t h it i n t e r a c t i v e l y , u s i n g the t y p e b a l l p r e v i o u s l y d e s i g n e d , by p l a c i n g the i n t e r p r e t e r u n d e r an e x p e r i m e n t a l time s h a r i n g m o n i t o r (TSM) a v a i l a b l e on a m a c h i n e in a n e a r b y IBM f a c i l i t y .
f u n c t i o n was used. For e x a m p l e , a f u n c t i o n F of two a r g u m e n t s h a v i n g an e x p l i c i t r e s u l t w o u l d t y p i c a l l y be u s e d in an e x p r e s s i o n s u c h as Z÷A F B, and this was the f o r m u s e d for the h e a d e r . The n a m e s for a r g u m e n t s and r e s u l t s in the h e a d e r w e r e of c o u r s e m a d e local to the f u n c t i o n d e f i n i t i o n , b u t at the o u t s e t no t h o u g h t w a s g i v e n to the l o c a l i z a t i o n of o t h e r names. F o r t u n a t e l y , the d e s i g n of the i n t e r p r e t e r m a d e it r e l a t i v e l y e a s y to l o c a l i z e the n a m e s by a d d i n g t h e m to the h e a d e r ( s e p a r a t e d by s e m i c o l o n s ) , and this was s o o n done. N a m e s so l o c a l i z e d w e r e s t r i c t l y local to the d e f i n e d f u n c t i o n , and t h e i r s c o p e did not e x t e n d to any o t h e r f u n c t i o n s u s e d w i t h i n it. It was not u n t i l the s p r i n g of 1968 w h e n B r e e d r e t u r n e d f r o m a t a l k by P r o f e s s o r A l a n P e r l i s on w h a t he c a l l e d " d y n a m i c l o c a l i z a t i o n " that the p r e s e n t s c h e m e w a s a d o p t e d , in w h i c h name s c o p e s e x t e n d to f u n c t i o n s c a l l e d w i t h i n a function.
T S M was a v a i l a b l e to us for o n l y a v e r y s h o r t time, and in e a r l y 1966 we b e g a n to c o n s i d e r an i m p l e m e n t a t i o n on S y s t e m / 3 6 0 , w o r k t h a t s t a r t e d in e a r n e s t in J u l y and c u l m i n a t e d in a r u n n i n g s y s t e m in the fall. The fact t h a t this i n t e r p r e t i v e and e x p e r i m e n t a l i m p l e m e n t a t i o n a l s o p r o v e d to be r e m a r k a b l y p r a c t i c a l and e f f i c i e n t is a t r i b u t e to the s k i l l of the i m p l e m e n t e r s , r e c o g n i z e d in 1973 by the a w a r d to the p r i n c i p a l s (L.M. Breed, R.H. L a t h w e l l , and R.D. Moore) of A C M ' s G r a c e M u r r a y H o p p e r Award. The fact t h a t the m a n y A P L i m p l e m e n t a t i o n s c o n t i n u e to be l a r g e l y i n t e r p r e t i v e m a y be a t t r i b u t e d to the a r r a y c h a r a c t e r of the l a n g u a g e w h i c h m a k e s possibleefficient interpretive execution.
We r e c o g n i z e d t h a t the f i n i t e l i m i t s on the r e p r e s e n t a t i o n of n u m b e r s i m p o s e d by an i m p l e m e n t a t i o n w o u l d r a i s e p r o b l e m s w h i c h m i g h t r e q u i r e some c o m p r o m i s e in the d e f i n i t i o n of the l a n g u a g e , and we t r i e d to k e e p t h e s e c o m p r o m i s e s to a m i n i m u m . For e x a m p l e , it w a s c l e a r t h a t we w o u l d h a v e to p r o v i d e b o t h i n t e g e r and f l o a t i n g p o i n t r e p r e s e n t a t i o n s of n u m b e r s and, b e c a u s e we a n t i c i p a t e d use of the s y s t e m in l o g i c a l d e s i g n , we w i s h e d to p r o v i d e an e f f i c i e n t (one bit per element) r e p r e s e n t a t i o n of l o g i c a l a r r a y s as well. H o w e v e r , at the c o s t of c o n s i d e r a b l e e f f o r t and some loss of e f f i c i e n c y , b o t h w e l l w o r t h w h i l e , the transitions between representations were m a d e to be i m p e r c e p t i b l e to the user, e x c e p t for s e c o n d a r y e f f e c t s s u c h as storage requirements.
We c h o s e to t r e a t the o c c u r r e n c e of a s t a t e m e n t as an o r d e r to e v a l u a t e it, and r e j e c t e d the n o t i o n of an e x p l i c i t f u n c t i o n to i n d i c a t e e v a l u a t i o n . In o r d e r to a v o i d the i n t r o d u c t i o n of "names" as a d i s t i n c t o b j e c t class, we a l s o r e j e c t e d the n o t i o n of "call by name" The c o n s t r a i n t s i m p o s e d by this d e c i s i o n w e r e e v e n t u a l l y r e m o v e d in a s i m p l e and g e n e r a l w a y by the i n t r o d u c t i o n of the e x e c u t e f u n c t i o n , w h i c h s e r v e d to e x e c u t e its c h a r a c t e r s t r i n g a r g u m e n t as an A P L e x p r e s s i o n . The e v o l u t i o n of these n o t i o n s is d i s c u s s e d at l e n g t h in the s e c t i o n on " E x e c u t e and F o r m a t " in The D e s i g n of A P L [I].
P r o b l e m s such as o v e r f l o w (i.e., a r e s u l t o u t s i d e the r a n g e of the r e p r e s e n t a t i o n s a v a i l a b l e ) w e r e t r e a t e d as d o m a i n errors, the t e r m d o m a i n b e i n g u n d e r s t o o d as the d o m a i n o f ~ e machine f u n c t i o n p r o v i d e d , r a t h e r t h a n as the d o m a i n of the a b s t r a c t m a t h e m a t i c a l f u n c t i o n on w h i c h it was based.
In e a r l i e r d i s c u s s i o n s w i t h a n u m b e r of c o l l e a g u e s , the i n t r o d u c t i o n of d e c l a r a t i o n s into the l a n g u a g e was u r g e d u p o n us as a r e q u i s i t e for i m p l e m e n t a t i o n . We r e s i s t e d this on the g e n e r a l b a s i s of s i m p l i c i t y , but a l s o on the b a s i s t h a t i n f o r m a t i o n in d e c l a r a t i o n s w o u l d be r e d u n d a n t , or p e r h a p s c o n f l i c t i n g , in a l a n g u a g e in w h i c h a r r a y s are p r i m i t i v e . The c h o i c e of an ~nterpretl~ve i m p l e m e n t a t i o n m a d e the e x c l u s i o n of d e c l a r a t i o n s f e a s i b l e , and thins, c o u p l e d wi't~ the determinatm~on to m i n i ~ a ~ e the i n f l u e n c e of m a c F ~ n e c o n s i d e r a t i o n s s u c k as the i n t e r n a l r e p r e s e n t a t i D n s of n u m b e r s o n the d e s i g n of the l a n g u a g e , led to an e a r l y dec£sa~on to e x c l u d e them.
One d i f f i c u l t y we had not a n t i c i p a t e d was the p r o v i s i o n of s e n s i b l e r e s u l t s for the c o m p a r i s o n of q u a n t i t i e s r e p r e s e n t e d to a limited precision. For e x a m p l e , if X and Y w e r e s p e c i f i e d by Y+2÷3 and X+3xY, then we w i s h e d to h a v e the c o m p a r i s o n 2=X y i e l d l ( r e p r e s e n t i n g true) e v e n t h o u g h the representation of~e quantity X would d i f f e r s l i g h t l y f r o m 2.
~n provi~l~ng a m e c b a n i ~ m Dy w h i c h a user could define a new function, we wished to p r o v i d e six forms in all: f u n c t i o n s width 0~ I, or 2 e x p l i c i t a r g u m e n t s , and f u n c t i o n s w i t h 0 or I e x p l i c i t r e s u l t s . This led to the a d o p t i o n of a h e a d e r for the f u n c t i o n d e f i n i t i o n w h i c h was, rn effect, a p a r a d i g m for the w a y in w h i c h a
T h i s was s o l v @ d by i n t r o d u c i n g a c o m p a r i s o n t o l e r a n c e ( c h r i s t e n e d fuzz by L.M. Breed, w h o k n e w of its use i n ~ e Bell I n t e r p r e t e r [18]) w h i c h was m u l t i p l i e d by the l a r g e r in m a g n i t u d e of the a r g u m e n t s to give a t o l e r a n c e to be a p p l i e d in the comparison. T h i s t o l e r a n c e was at f i r s t f i x e d (at IE-13) and was l a t e r m a d e
51
user may get the names of w o r k s p a c e s in his own or a common library, or get a listing of functions or v a r i a b l e s in his active workspace.
specifiable by the user. The matter has proven more difficult than we first expected, and d i s c u s s i o n of it still continues [19, 20].
The language used to control the system functions of loading and storing w o r k s p a c e s was not APL, but c o m p r i s e d a set of s [ s t e m commands. The first c h a r a c t e r of each system command is a right parenthesis, w h i c h cannot occur at the left of a valid APL expression, and therefore acts as an "escape character", freeing the syntax of w h a t follows. S y s t e m commands w e r e used for other aspects such as sign-on and sign-off, m e s s a g e s to other users, and for the setting and sensing of various system p a r a m e t e r s such as the index origin, the p r i n t i n g precision, the print width, and the r a n d o m link used in g e n e r a t i n g the pseu o - ~ d ~ sequence for the r a n d o m function.
A related, but less serious, question was what to do with the rational root of a negative number, a q u e s t i o n w h i c h arose because the exponent (as in the e x p r e s s i o n -8*2÷3) would normally be p r e s e n t e d as an a p p r o x i m a t i o n to a rational. Since we w i s h e d to make the m a t h e m a t i c s behave "as you thought it did in high school" we w i s h e d to treat such cases p r o p e r l y at least for rationals w i t h d e n o m i n a t o r s of r e a s o n a b l e size. This was achieved by d e t e r m i n i n g the result sign by a c o n t i n u e d fraction e x p a n s i o n of the right argument (but only for negative left arguments) and w o r k e d for all d e n o m i n a t o r s up to 80 and "most" above. Most of the m a t h e m a t i c a l functions required were p r o v i d e d by programs taken from the w o r k of the late Hirondo Kuki in the FORTRAN IV Subroutine Library. Certain functions (such as the inverse hyperbolics) were, however, not available and w e r e developed, during the summers of 1967 and 1968, by K. M. Brown, then on the faculty of Cornell University.
W h e n it first became n e c e s s a r y to name the i m p l e m e n t a t i o n we chose the acronym formed from the book title A P r o @ r a m m i n g L a n g u a g e [I0] and, to allow a clear d i s t i n c t i o n b e t w e e n the language and any p a r t i c u l a r i m p l e m e n t a t i o n of it, initiated the use of the m a c h i n e name as part of the name of the i m p l e m e n t a t i o n (as in APL\1130 and APL\360). W i t h i n the design group we had until that time simply referred to "the language".
The f u n d a m e n t a l d e c i s i o n c o n c e r n i n g the systems e n v i r o n m e n t was the adoption of the concept of a workspace. As d e f i n e d in "The APL\360 Terminal System" [21]:
A brief w o r k i n g manual of the APL\360 system was first p u b l i s h e d in N o v e m b e r 1966 [22], and a full manual appeared in 1968 [23]. The initial i m p l e m e n t a t i o n (in FORTRAN on an IBM 7090) was d i s c u s s e d by Abrams [24], and the t i m e - s h a r e d i m p l e m e n t a t i o n on System/360 was d i s c u s s e d by Breed and Lathwell [25].
APL\360 is b u i l t around the idea of a workspace, analogous to a notebook, in w h i c h one keeps work in progress. The w o r k s p a c e holds both defined functions and v a r i a b l e s (data), and it may be stored into and retrieved from a library holding many such workspaces. When r e t r i e v e d from a library by an a p p r o p r i a t e command from a terminal, a copy of the stored w o r k s p a c e becomes active at that terminal, and the functions defined in it, t o g e t h e r w i t h all the APL primitives, become available to the user.
3.
SYSTEMS
Use of the APL system by others in IBM began long before it had been c o m p l e t e d to the point d e s c r i b e d in APL\360 User's We q u i c k l y l e ~ n e T t ~ Manual [ 2 3 ] . ~-~i~ulties a s s o c i a t e d with c h a n g i n g the s p e c i f i c a t i o n s of a system already in use, and the impact of changes on e s t a b l i s h e d users and programs. As a result we learned to a p p r e c i a t e the importance of the r e l a t i v e l y long period of d e v e l o p m e n t of the language w h i c h preceded the implementation; early i m p l e m e n t a t i o n of languages tends to stifle radical change, limiting further d e v e l o p m e n t to the addition of features and frills.
The three commands required for m a n a g i n g a library are "save", "load", and "drop", which r e s p e c t i v e l y store a copy of an active w o r k s p a c e into a library, make a copy of a stored w o r k s p a c e active, and destroy the library copy of a workspace. Each user of the system has a private library into w h i c h only he can store. However, he may load a w o r k s p a c e from any of a number of common libraries, or if he is privy to the necessary information, from another user's private library. F u n c t i o n s or v a r i a b l e s in d i f f e r e n t w o r k s p a c e s can be combined, either item by item or all at once, by a fourth command, called "copy". By means of three c a t a l o g i n g commands, a
On the other hand, we also learned the advantages of a running model of the language in exposing anomalies and, in particular, the a d v a n t a g e of input from a large p o p u l a t i o n of users c o n c e r n e d with a broad range of applications. This use q u i c k l y exposed the major d e f i c i e n c i e s of the system.
52
interfaces w i t h other users or w i t h a u x i l i a r y processors. T h r o u g h the latter, c o m m u n i c a t i o n may be had w i t h other elements of the host system, such as its file subsystem, or w i t h other systems altogether. Second, there is a set of s y s t e m v a r i a b l e s w h i c h define parts of the p e r m a n e n t interface b e t w e e n an APL p r o g r a m and the u n d e r l y i n g processor. These are used for i n t e r r o g a t i n g and c o n t r o l l i n g the c o m p u t i n g environment, such as the origin for array indexing or the action to be taken upon the o c c u r r e n c e of certain e x c e p t i o n a l conditions.
Some of these d e f i c i e n c i e s w e r e r e c t i f i e d by the g e n e r a l i z a t i o n of c e r t a i n functions and the a d d i t i o n of others in a process of gradual evolution. Examples include the e x t e n s i o n of the c a t e n a t i o n function to apply to arrays other than vectors and to p e r m i t lamination, and the a d d i t i o n of a g e n e r a l i z e d m a t r i x inverse function d i s c u s s e d by M.A. Jenkins [26]. Other d e f i c i e n c i e s w e r e of a systems nature, c o n c e r n i n g the need to c o m m u n i c a t e b e t w e e n c o n c u r r e n t APL programs (as in our d e s c r i p t i o n of System/360), to c o m m u n i c a t e w i t h the APL system itself w i t h i n APL rather than by the ad hoc device of s y s t e m commands, to c o m m u n i c a t e w i t h alien systems and devices (as in the use of file devices), and the need to d e f i n e functions w i t h i n the language in terms of their r e p r e s e n t a t i o n by APL arrays. These matters required more f u n d a m e n t a l innovations and led to w h a t we have c a l l e d the system phase. The m o s t p r e s s i n g p r a c t i c a l need for the a p p l i c a t i o n of APL systems to c o m m e r c i a l data p r o c e s s i n g was the p r o v i s i o n of file facilities. One of the first c o m m e r c i a l systems to p r o v i d e this was the File S u b s y s t e m r e p o r t e d by Sharp [27] in 1970, and d e f i n e d in a SHARE p r e s e n t a t i o n by L.M. Breed [28], and in a m a n u a l p u b l i s h e d by S c i e n t i f i c Time Sharing As its name implies, it C o r p o r a t i o n [29]. was not an integral part of the language but was, like the s y s t e m commands, a p r a c t i c a l ad hoc solution to a p r e s s i n g problem.
4.
A DETAILED EXAMPLE
At the risk of p l a c i n g undue emphasis on one facet of the language, we will now examine in detail the e v o l u t i o n of the t r e a t m e n t of numeric constants, in order to illustrate how s u b s t a n t i a l changes were c o m m o n l y a r r i v e d at by a sequence of small steps. Any numeric constant, i n c l u d i n g a c o n s t a n t vector, can be w r i t t e n as an e x p r e s s i o n i n v o l v i n g APL p r i m i t i v e functions applied to d e c i m a l numbers as, for example, in 3.14xi0,-5 and -2.718 and (3.14×10,-5),(-2.718).5. At the o u t s e t we p e r m i t t e d only n o n - n e g a t i v e d e c i m a l c o n s t a n t s of the form 2.7~8, and all other values had to be e x p r e s s e d as c o m p o u n d statements. Use of the m o n a d i c n e g a t i o n f u n c t i o n in p r o d u c i n g n e g a t i v e v a l u e s in vectors was p a r t i c u l a r l y cumbersome, as in (-4),3,(-5),-7. We soon r e a l i z e d that the a d o p t i o n of a specific "negative" symbol w o u l d solve the problem, and f a m i l i a r i t y w i t h B e b e r m a n ' s w o r k [333 led us to the a d o p t i o n of his "high minus" w h i c h we had, rather fortuitously, included in our c h a r a c t e r set. The c o n s t a n t v e c t o r used above could now be w r i t t e n as -4.3, 5, 7.
In 1970 R.H. Lathwell p r o p o s e d w h a t was to become the basis of a general solution to many systems p r o b l e m s of APL\360, a shared v a r i a b l e p r o c e s s o r [303 w h i c h i m p l e m e n t e d the shared v a r i a b l e scheme of c o m m u n i c a t i o n among processors. This w o r k c u l m i n a t e d in the A P L S V S y s t e m [31] w h i c h b e c a m e g e n e r a l l y a v a i l a b l e in 1973. F a l k o f f ' s "Some I m p l i c a t i o n s of Shared V a r i a b l e s " [32] presents the e s s e n t i a l notion of the shared v a r i a b l e s y s t e m as follows:
S o l u t i o n of the p r o b l e m of n e g a t i v e n u m b e r s e m p h a s i z e d the r e m a i n i n g a w k w a r d n e s s of factors of the form 10*N. At a m e e t i n g of the p r i n c i p a l s in Chicago, w h i c h included D o n a l d M i t c h e l l and Peter C a l i n g a e r t of Science R e s e a r c h A s s o c i a t e s , it was realized that the i n t r o d u c t i o n of a scaled form of c o n s t a n t in the m a n n e r used in F O R T R A N w o u l d not c o m p l i c a t e the syntax, and this was soon adopted.
A user of early APL systems e s s e n t i a l l y had w h a t a p p e a r e d to be an "APL machine" at his disposal, but one w h i c h lacked access to the rest of the world. In more r e c e n t systems, such as A P L S V and others, this i s o l a t i o n is overcome and c o m m u n i c a t i o n w i t h other users and the host system is p r o v i d e d for by shared variables.
These r e f i n e m e n t s left one function in the w r i t i n g of any vector constant, namely, catenation. The s t r a i g h t f o r w a r d e x e c u t i o n of an e x p r e s s i o n for a c o n s t a n t v e c t o r of N elements involved N-I c a t e n a t i o n s of scalars w i t h v e c t o r s of i n c r e a s i n g length, the h a n d l i n g of r o u g h l y .5xN×N+I e l e m e n t s in all. To avoid gross i n e f f i c i e n c i e s in the input of a c o n s t a n t v e c t o r from the keyboard, c a t e n a t i o n was
Two classes of shared v a r i a b l e s are a v a i l a b l e in these systems. First, there is a ~eneral shared v a r i a b l e facility w i t h w h i c h a user may e s t a b l i s h arbitrary, temporary,
53
therefore given special treatment original implementation.
in the
W i t h the first computer languages (machine languages) all of these notions were, for good p r a c t i c a l reasons, dropped; variable names were r e p r e s e n t e d by "register numbers", a p p l i c a t i o n of a function (as in A+B) was n e c e s s a r i l y broken into a sequence of operations (such as "Load register 801 into the A d d e n d register, Load register 802 into the A u g e n d register, etc."), grouping of o p e r a t i o n s was therefore non-existent, the various functions p r o v i d e d were r e p r e s e n t e d by numbers rather than by familiar m a t h e m a t i c a l symbols, results depended sharply on the p a r t i c u l a r r e p r e s e n t a t i o n used in the machine, and the use of arrays, as such, disappeared.
This system had been in use for perhaps six months w h e n it occurred to Falkoff that since commas were not required in the normal r e p r e s e n t a t i o n of a matrix, vector constants might do without them as well. This seemed o u t r a g e o u s l y simple, and we looked for flaws. Finding none we adopted and i m p l e m e n t e d the idea immediately, but it took some time to overcome the habit of writing e x p r e s s i o n s such as (3,3)pX instead of 3 3pZ. 5.
CONCLUSIONS
Nearly all p r o g r a m m i n g languages are rooted in m a t h e m a t i c a l notation, e m p l o y i n g such fundamental notions as functions, variables, and the decimal (or other radix) r e p r e s e n t a t i o n of numbers, and a view of p r o g r a m m i n g languages as part of the longer-range d e v e l o p m e n t of m a t h e m a t i c a l notation can serve to illuminate their development.
Some of these limitations were soon removed in early "automatic programming" languages, and languages such as FORTRAN introduced a limited t r e a t m e n t of arrays, but many of the original limitations remain. For example, in F O R T R A N and related languages the size of an array is not a language concept, the asterisk is used instead of any of the familiar m a t h e m a t i c a l symbols for m u l t i p l i c a t i o n , the power function is r e p r e s e n t e d by two o c c u r r e n c e s of this symbol rather than by a d i s t i n c t symbol, and concern w i t h r e p r e s e n t a t i o n still survives in declarations.
Before the advent of the g e n e r a l - p u r p o s e computer, m a t h e m a t i c a l notation had, in a long and painful e v o l u t i o n w e l l - d e s c r i b e d in Cajori's history of m a t h e m a t i c a l notations [341, embraced a number of important notions:
APL has, in its development, remained much closer to m a t h e m a t i c a l notation, r e t a i n i n g (or selecting one of) e s t a b l i s h e d symbols w h e r e possible, and e m p l o y i n g m a t h e m a t i c a l terminology. P r i n c i p l e s of s i m p l i c i t y and u n i f o r m i t y have, however, been given precedence, and these have led to certain d e p a r t u r e s from c o n v e n t i o n a l m a t h e m a t i c a l notation as, for example, the adoption of a single form (analogous to 3+4) for dyadic functions, a single form (analogous to -4) for m o n a d i c functions, and the adoption of a u n i f o r m rule for the a p p l i c a t i o n of all scalar functions to arrays. This r e l a t i o n s h i p to m a t h e m a t i c a l notation has been d i s c u s s e d in The Design of APL [13 and in "Algebra as a Language" w h i c h occurs as A p p e n d i x A in Algebra: an a l g o r i t h m i c t r e a t m e n t [353.
I. The notion of assigning an alphabetic name to a variable or unknown quantity (Cajori, Secs. 339-3~I). 2. The notion of a function w h i c h applies to an argument or arguments to produce an explicit result w h i c h can itself serve as argument to another function, and the a s s o c i a t e d adoption of specific symbols (such as + and x) to denote the more common functions (Cajori, Secs. 200-233). 3. A g g r e g a t i o n or grouping symbols (such as the parentheses) w h i c h make possible the use of c o m p o s i t e e x p r e s s i o n s w i t h an u n a m b i g u o u s s p e c i f i c a t i o n of the order in w h i c h the c o m p o n e n t functions are to be executed (Cajori, Secs. 342-355).
The close ties w i t h m a t h e m a t i c a l n o t a t i o n are evident in such things as the r e d u c t i o n operator (a g e n e r a l i z a t i o n of sigma notation), the inner p r o d u c t (a g e n e r a l i z a t i o n of m a t r i x product), and the outer product (a g e n e r a l i z a t i o n of the outer p r o d u c t used in tensor analysis). In other aspects the relation to m a t h e m a t i c a l notation is closer than might appear. For example, the order of e x e c u t i o n of the c o n v e n t i o n a l e x p r e s s i o n F G H (Z) can be e x p r e s s e d by saying that the right argument of each function is the value of the entire e x p r e s s i o n to its right; this rule, extended to dyadic as well as monadic functions, is the rule used in APL. Moreover, the term o p e r a t o r is used in the
4. Simple, u n i f o r m r e p r e s e n t a t i o n s for numeric q u a n t i t i e s (Cajori, Secs. 276-289). 5. The treatment of q u a n t i t i e s w i t h o u t concern for the p a r t i c u l a r r e p r e s e n t a t i o n used. 6. The notion of treating vectors, matrices, and h i g h e r - d i m e n s i o n a l arrays as entities, w h i c h had by this time become fairly w i d e s p r e a d in mathematics, physics, and engineering.
54
same sense as in "derivative operator" "convolution operator" in mathematics, to avoid conflict it is not used as a synonym for function.
We believe that the design of A P L was also affected in i m p o r t a n t respects by a number of p r o c e d u r e s and circumstances. Firstly, from its inception APL has been d e v e l o p e d by using it in a s u c c e s s i o n of areas. This emphasis on a p p l i c a t i o n clearly favors p r a c t i c a l i t y and simplicity. The treatment of many d i f f e r e n t areas fostered generalization: for example, the general inner product was d e v e l o p e d in a t t e m p t i n g to obtain the advantages of ordinary matrix algebra in the treatment of symbolic logic.
or and
As a corollary we may remark that the other major p r o g r a m m i n g languages, although known to the designers of APL, exerted little or no influence, because of their radical departures from the line of d e v e l o p m e n t of m a t h e m a t i c a l n o t a t i o n w h i c h APL continued. A concise view of the current use of the language, together w i t h comments on matters such as w r i t i n g style, may be found in Falkoff's review of the 1975 and 1976 International APL Congresses
[36].
Secondly, the lack of any machine r e a l i z a t i o n of the language during the first seven or eight years of its d e v e l o p m e n t allowed the designers the freedom to make radical changes, a freedom not normally enjoyed by designers who must observe the needs of a large w o r k i n g p o p u l a t i o n d e p e n d e n t on the language for their daily computing needs. This c i r c u m s t a n c e was due more to the dearth of interest in the language than to foresight.
A l t h o u g h this is not the place to discuss the future, it should be remarked that the evolution of APL is far from finished. In particular, there remain large areas of mathematics, such as set theory and vector calculus, w h i c h can clearly be incorporated in APL through the introduction of further operators. There are also a number of important features w h i c h are already in the abstract language, in the sense that their i n c o r p o r a t i o n requires little or no new definition, but are as yet absent from most implementations. Examples include complex numbers, the p o s s i b i l i t y of defining functions of ambiguous valence (already i n c o r p o r a t e d in at least two systems [37, 38]), the use of user defined functions in c o n j u n c t i o n w i t h operators, and the use of selection functions other than indexing to the left of the a s s i g n m e n t arrow.
Thirdly, at every stage the design of the language was c o n t r o l l e d by a small group of not more than five people. In particular, the men who designed (and coded) the i m p l e m e n t a t i o n were part of the language design group, and all members of the design group were involved in broad decisions a f f e c t i n g the implementation. On the other hand, many ideas were received and accepted from people outside the design group, p a r t i c u l a r l y from active users of some i m p l e m e n t a t i o n of APL.
We conclude with some general comments, taken from The Design of APL [13, on principles which g u l ~ e ~ - ~ circumstances which shaped, the e v o l u t i o n of APL:
Finally, design decisions were made by Quaker consensus; controversial innovations were deferred until they could be revised or r e e v a l u a t e d so as to obtain unanimous agreement. U n a n i m i t y was not achieved without cost in time and effort, and many d i v e r g e n t paths were explored and assessed. For example, many d i f f e r e n t notations for the circular and h y p e r b o l i c functions were e n t e r t a i n e d over a period of more than a year before the present scheme was proposed, w h e r e u p o n it was quickly adopted. As the language grows, more effort is needed to explore the r a m i f i c a t i o n s of any major innovation. Moreover, greater care is needed in i n t r o d u c i n g new facilities, to avoid the p o s s i b i l i t y of later r e t r a c t i o n that w o u l d i n c o n v e n i e n c e thousands of users.
The actual operative principles guiding the design of any complex system must be few and broad. In the present instance we believe these principles to be simplicity and practicality. S i m p l i c i t y enters in four guises: u n i f o r m i t y (rules are few and simple), generality (a small numbe! of general functions provide as special cases a host of more s p e c i a l i z e d functions), f a m i l i a r i t y (familiar symbols and usages are adopted whenever possible), and brevity (economy of e x p r e s s i o n is sought). P r a c t i c a l i t y is m a n i f e s t e d in two respects: concern w i t h actual application of the language, and concern w i t h the practical limitations imposed by existing equipment.
55
12. Iverson, K.E., Graduate Research and Instruction, Proceedings of First Conference on Training P e ~ o n n ~ f o r the Computing Machine Field, Wayne State University, D e t r o i T , Michigan, June, 1954, Arvid W. Jacobson, Editor, pages 25-29.
ACKNOWLEDGEMENTS For critical comments arising from their reading of this paper, we are indebted to a number of our colleagues who were there when it happened, particularly P.S. Abrams of Scientific Time Sharing Corporation, R.H. Lathwell and R.D. Moore of I.P. Sharp Associates, and L.M. Breed and E.E. McDonnell of IBM Corporation.
13. Falkoff, A.D., K.E. Iverson, and E.H. Sussenguth, A Formal Description of System/360, IBM Systems Journal, Vol 4, No. 4, O c t o b e ~ 1 9 ~ 4 , pages 198-262. 14. Iverson, K.E., Formalism in Programming Languages, Communications of the ACM, Vol.7, No.2, February 1964, pages 80-88.
REFERENCES I.
2.
3.
4.
5.
6.
Falkoff, A.D., and K.E. Iverson, The Design of APL, IBM Journal of Research and Development, Voi.17, No.W, July 1973, pages 324-334.
15. Iverson, K.E., Elementary Functions, Science Research Associates, 1966.
The Story of APL, Computing Report i__n Science and Engineering, IBM Corp., Vol.6, No.2, April 1970, pages 14-18.
16. Berry, P.C., APL\360 Primer, IBM Corporation ( G H 2 0 - 0 6 8 9 ~ 6 9 . 17. Hellerman, H., Experimental Personalized Array Translator System, Communications of the ACM, Vol.7, No.7, July 1964, pages 433-438.
Origin of APL, a videotape prepared by John Clark for the Fourth APL Conference , 1974, with the participation of P.S. Abrams, L.M. Breed, A.D. Falkoff, K.E. Iverson, and R.D. Moore. Available from Orange Coast Community College, Costa Mesa, California.
18. Wolontis, V.M., A Complete Floating Point Decimal Interpretive System, Technical Newsletter No. 11, IBM Applied Science D i v i s ~ n , 1956.
Falkoff, A.D., and K.E. Iverson, APL Language, Form No. GC26-3847, IBM Corp., 1975
19. Lathwell, R.H., APL Comparison Tolerance, APL 76 Conference Proceedings, Association for Computing Machinery, 1976, pages 255-258.
McDonnell, E. E., The Story of o, APL Quote-Quad, Vol. 8, No. 2, ACM, SIGPLAN Tec~ic~ Committee on APL (STAPL), December, 1977, pages 48-54.
20. Breed, L.M., Definitions for Fuzzy Floor and Ceiling, Technical Report No. TR03.024, IBM Corporation, M a r c ~ 7 ~ .
Brooks, F.P., and K.E. Iverson, Automatic Data Processing, John Wiley and Sons, ~ 7 ~ .
21. Falkoff, A.D., and K.E. Iverson, The APL\360 Terminal System, Symposium on Interactive Systems for Experimental Applied Mathematies,-~[s. M. Klerer and J. Reinfelds, Academic Press, New York, 1968, pages 22-37.
7.
Falkoff, A.D., Algorithms for Parallel Search Memories, Journal of the ACM, Vol. 9, 1962, pages 4 8 8 - 5 1 ~ . - -
B.
Iverson, K.E., Machine Solutions of Linear Differential E~uatfons: A p p ' ~ a t i o n s to a Dynamic'Economic Model, Harvard University, 1954 (Ph.D.
22. Falkoff, A.D., and K.E. Iverson, APL\360, IBM Corporation, November 9~6
Te~s).
23. Falkoff, A.D., and K.E. Iverson, APL\360 User's Manual, IBM Corporation, August I ~ .
9.
Iverson, K.E., The Description of Finite Sequential Processes, Proceedings of the Fourth London Symposium-on I--no~matlon--~---'Teo~ Colin Cherry, Editor, 1960, pages 447-457.
24. Abrams, P.S., A_n ~nterpreter for Iverson Notation, Technical Report CS47, Computer Science Department, Stanford University, 1966.
10. Iverson, K.E., A Programming Language, John Wiley and Sons, 1962.
25. Breed, L.M., and R.H. Lathwell, The Implementation of APL\360, Symposium o_n Interactive Systems for Experimental and Applied M a t h e m a t ~ , eds. M. Klerer a ~ J. Reinfelds, Academic Press, New York, 1968, pages 390-399.
11. Graduate Prqgram in Automatic Data Processing, Harvard U n i v e r s i t y , q 5 4 , (Brochure).
56
APPENDIX A
26. Jenkins, M.A., The Solution of Linear S[stems o_~ Equat-~ns and Linear Least Squares Problems in APL, IBM Technical Report No. 320-2989, 1970.
Reprinted from APL\360 User's Manual
[23]
ACKNOWLEDGEMENTS
27. Sharp, Ian P., The Future of APL to benefit from a new file system, Canadian Data S[stems, March 1970.
The APL language was first defined by K.E. Iverson in A Programming Language (Wiley, 1962) any has since been developed in collaboration with A.D. Falkoff. The APL\360 Terminal System was designed with the additional collaboration of L.M. Breed, who with R.D. Moore*, also designed the S/360 implementation. The system was programmed for S/360 by Breed, Moore, and R.H. Lathwell, with continuing assistance from L.J. Woodrum e, and contributions by C.H. Brenner, H.A. Driscoll**, and S.E. Krueger**. The present implementation also benefitted from experience with an earlier version, designed and programmed for the IBM 7090 by Breed and P.S. Abrams ®e.
28. Breed, L.M., The APL PLUS File System, Proceedings of SHARE XXXV, August, 1970, page 3 ~ . - 29. APL PLUS File Subsystem Instruction M~ua~, Sc~tific Time STaring Corporation, Washington, D.C., 1970. 30. Lathwell, R.H., System Formulation and APL Shared Variables, IBM Journal of Research and Development, Voi.17, ~ . 4 , July 1973, pages 353-359. 31. Falkoff, A.D., and K.E. Iverson, APLSV User's Manual, IBM Corporation, 1973. 32. Falkoff, A.D., Some Implications of Shared Variables, Formal Languages and Programming, R. Agullar-~--~ed., North Holland Publishing Company, 1976, pages 65-75. Reprinted in APL 76 Conference Proceedings, Association for Computing Machinery, pages 141-148.
The development of the system has also profited from ideas contributed by many other users and colleagues, notably E.E. McDonnell, who suggested the notation for the signum and the circular functions. In the preparation of the present manual, the authors are indebted to L.M. Breed for many discussions and suggestions; to R.H. Lathwell, E.E. McDonnell, and J.G. Arnold*e for critical reading of successive drafts; and to Mrs. G.K. Sedlmayer and Miss Valerie Gilbert for superior clerical assistance.
33. Beberman, M., and H.E. Vaughn, H i S School Mathematics Course I, Heat~, 1964. 34. Cajori, F., A History of Mathematical Notations, Vol. I, Not~io-ns in Elementary Mathematics, The O ~ n Court Publishing Co., La Salle, Illinois, 1928.
A special acknowledgement is due to John L. Lawrence, who provided important support and encouragement during the early development of APL implementation, and who pioneered the application of APL in computer-related instruction.
35. Iverson, K.E., Algebra: an algorithmic treatment, Addison Wesley, 1972. 36. Falkoff, A.D., APL75 and APL76: an overview of the Proceedings of the Pisa and Ottawa Congresses, ACM Computing Reviews, Vol. 18, No. 4j--April, 1977, Pages 139-141.
*I.P. Sharp Associates, Toronto, Canada. ®General Systems Architecture, IBM Corporation, Poughkeepsie, N.Y.
37. Weidmann, Clark, APLUM Reference Manual, University of Massachusetts, ~ t , Massachusetts, 1975.
**Science Research Associates, Chicago, Illinois.
38. Shar~ APL Technical Note No. 25, I.P. Sharp Associates, Toronto, Canada.
®®Computer Science Department, Stanford University, Stanford, California. *®Industry Development, White Plains, N.Y.
57
IBM Corporation,