PALGO(ID:3164/pal007)Olivetti Algol 60 variant with lambda calculusPacelli, Gavioli, Palermo and Picciafuoco at Milan Olivetti Computer Laboratories 1961 This was a mini-computer Algol 60 subset with two extraordinary features 1) A FOR structure with multiple concurrent variables 2) A lambda calculus predicate assignment Places Related languages
References: INTRODUCTION The PALGO project was started with the aim of defining an Algol 60 subset to be used as a programming language for medium size computers of the type Olivetti Elba 6001. It was decided that the process ought to point toward the following goals: l)to leave out those structural elements of the Algol language which would necessitate a very large compiler program. 2) To provide all data spaces and group of operations of the Algol 60. Beside the above two major points, additional features were introduced in order to eliminate some ambiguities of Algol 60 as well as to increase the flexibility of the language itself. These features concern both the procedure statements, for which Church's Lambda-notation was introduced, and the FOR statements, which were allowed to control more than one variable in the same loop. As a result of this philosophy PALGO language should not be considered a subset of Algol 60. Extract: LAMBDA Calculus procedures LAMBDA Calculus procedures The calling of a procedure is effected by a procedure statement composed of the procedure name followed by the list of the actual parameters. This implies that the formal parameters in the procedure declaration and the actual parameters of the procedure call are in a biunivoque and equiordered correspondence. When a formal parameter is a scalar variable the identifier of that formal parameter in the procedure declaration may be used as a function identifier and the call of such a function can be executed by writing this identifier followed by the list of the actual input parameters in the procedure call. For example, the procedure defined by the statement: PROCEDURE ALFA (A,M: B;C,D) can be called by the statement: ALFA (Al, Ml: BETA GAMMA, DELTA) or, otherwise, by one of the following statements: B (Al, Ml) C (Al, Ml) D (Al, Ml) which respectively permit the computation of B, C, D, in correspondence to the actual input parameter Al, Ml. This second type of call can be particularly useful when one wants to use, for example, different values of B (or C, or D) in the same arithmetic expression without interrupting the computation. This technique eliminates any side effect in arithmetic expression if we accept the following restriction: "Non-local variables and parameters called by name cannot appear in the left side of an assignment statement." The actual input parameters that do not correspond to procedure names can be: 1) Arithmetic expressions; 2) Boolean expressions; 3) Array identifiers. When actual input parameter corresponds to a formal parameter that signifies a procedure identifier, it must be identified by means of the Church's Lambda-notation in the form: [1] LAMBDA ((dummy list), F) where F is any form on variables or subscripted variables, that can contain procedure calls with undefined parameters. The dummy list describes those variables of F which are not defined for the call under consideration. If [1] is the actual parameter of a procedure named P, a call on P can appear among the possible procedure calls contained in F. Let us define the following procedure statements: PROCEDURE Fl (A, W(X,Y), Q(Z):F1) PROCEDURE F2 (A,B,C: F2) PROCEDURE F3 (A,B: F3) PROCEDURE F4 (A,B,W(X): F4) Thus it is legitimate to write a procedure call of the type: Fl (Al, LAMDA((B,X), B+F3 (Y,X)), LAMDA ((Y), F4 (A1,Y, LAMDA ((X),F2(A1,X,G1)+F3(X,B1))))). The input-output statements accepted by the PALGO system operate with a list that indicates the quantities to be transferred, Every list element can be a real variable, a subscripted variable, an expression which contains one or more subscripted variables together with a rule for subscript variation. On such expressions one can describe by means of the parenthesis symbols “(“, “)” a FOR nesting, using FOR elements of type STEP-UNTIL which define precisely a sequence of subscripted variables. Extract: Lambda Calculus predicates While the assignment and the GO TO statements have not been modified with The FOR statements accept only one list element and can control more than one The proceeding type of FOR statement has the form: FOR V 1 := L1, V2: =L2,....VK: = LK WHILE B*DO Where: following forms:
where E1? E2 are arithmetic expression and B is a Boolean expression. expression. B* is a Boolean expression. When an L element is of the type b) or c) and B The meaning of this FOR statement is as follows: the statement following DO must be executed as long as B* is true varying the corresponding L1 elements. When the condition of an L 1 is no longer truethe corresponding Vi is frozen at the value it last had until the condition becomes true again. in Symbolic Languages in Data Processing, in the Proceedings of the Symposium organized and edited by the International Computation Centre, Rome, Italy, March 2631, 1962, Gordon and Beech Science Publishers, 1962. view details [321 programming languages with indication of the computer manufacturers, on whose machinery the appropriate languages are used to know. Register of the 74 computer companies; Sequence of the programming languages after the number of manufacturing firms, on whose plants the language is implemented; Sequence of the manufacturing firms after the number of used programming languages.] in Symbolic Languages in Data Processing, in the Proceedings of the Symposium organized and edited by the International Computation Centre, Rome, Italy, March 2631, 1962, Gordon and Beech Science Publishers, 1962. view details in Computers & Automation 21(6B), 30 Aug 1972 view details The exact number of all the programming languages still in use, and those which are no longer used, is unknown. Zemanek calls the abundance of programming languages and their many dialects a "language Babel". When a new programming language is developed, only its name is known at first and it takes a while before publications about it appear. For some languages, the only relevant literature stays inside the individual companies; some are reported on in papers and magazines; and only a few, such as ALGOL, BASIC, COBOL, FORTRAN, and PL/1, become known to a wider public through various text- and handbooks. The situation surrounding the application of these languages in many computer centers is a similar one. There are differing opinions on the concept "programming languages". What is called a programming language by some may be termed a program, a processor, or a generator by others. Since there are no sharp borderlines in the field of programming languages, works were considered here which deal with machine languages, assemblers, autocoders, syntax and compilers, processors and generators, as well as with general higher programming languages. The bibliography contains some 2,700 titles of books, magazines and essays for around 300 programming languages. However, as shown by the "Overview of Existing Programming Languages", there are more than 300 such languages. The "Overview" lists a total of 676 programming languages, but this is certainly incomplete. One author ' has already announced the "next 700 programming languages"; it is to be hoped the many users may be spared such a great variety for reasons of compatibility. The graphic representations (illustrations 1 & 2) show the development and proportion of the most widely-used programming languages, as measured by the number of publications listed here and by the number of computer manufacturers and software firms who have implemented the language in question. The illustrations show FORTRAN to be in the lead at the present time. PL/1 is advancing rapidly, although PL/1 compilers are not yet seen very often outside of IBM. Some experts believe PL/1 will replace even the widely-used languages such as FORTRAN, COBOL, and ALGOL.4) If this does occur, it will surely take some time - as shown by the chronological diagram (illustration 2) . It would be desirable from the user's point of view to reduce this language confusion down to the most advantageous languages. Those languages still maintained should incorporate the special facets and advantages of the otherwise superfluous languages. Obviously such demands are not in the interests of computer production firms, especially when one considers that a FORTRAN program can be executed on nearly all third-generation computers. The titles in this bibliography are organized alphabetically according to programming language, and within a language chronologically and again alphabetically within a given year. Preceding the first programming language in the alphabet, literature is listed on several languages, as are general papers on programming languages and on the theory of formal languages (AAA). As far as possible, the most of titles are based on autopsy. However, the bibliographical description of sone titles will not satisfy bibliography-documentation demands, since they are based on inaccurate information in various sources. Translation titles whose original titles could not be found through bibliographical research were not included. ' In view of the fact that nany libraries do not have the quoted papers, all magazine essays should have been listed with the volume, the year, issue number and the complete number of pages (e.g. pp. 721-783), so that interlibrary loans could take place with fast reader service. Unfortunately, these data were not always found. It is hoped that this bibliography will help the electronic data processing expert, and those who wish to select the appropriate programming language from the many available, to find a way through the language Babel. We wish to offer special thanks to Mr. Klaus G. Saur and the staff of Verlag Dokumentation for their publishing work. Graz / Austria, May, 1973 in Computers & Automation 21(6B), 30 Aug 1972 view details |