Olivetti Algol 60 variant with lambda calculus 

Pacelli, 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

Related languages
ALGOL 60 => PALGO   Augmentation of

  • Pacelli, M. ; Gavioli, D.; Palermo, G. and Picciafuoco, U. "PALGO: An Algorithmic Language and its Translator for Olivetti ELBA 6001" view details Extract: 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:
    can be called by the statement:
    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:
    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
    respect to ALGOL 60, the IF statements have been simplified to permit only a
    decision based on the value of a Boolean expression whether to pass program
    control to the next following statements or to another statement.

    The FOR statements accept only one list element and can control more than one
    variable in the same loop.

    The proceeding type of FOR statement has the form:

    FOR V1 := L1, V2: =
    L2,....VK: = LK


  • V1 V2....VK are integer variable

  • L1; L2....LK are elements having the
    following forms:

    2. e1 STEP E2 UNTIL E3 where
        E1, Ea, E3 are arithmetic

    4. E1 STEP E2 WHILE B
        where E1? E2 are arithmetic expression and B is a
        Boolean expression.

    6. E1 WHILE B where E  size=2>1 is an arithmetic expression and B is a Boolean

    1. B* is a Boolean expression. When an L element is of the type b) or c) and B
      is identical with B* then the part WHILE B can be eliminated in

    2. The meaning of this FOR statement is as follows:

      the statement following DO must be executed as long as B* is true varying
      i (i = 1, 2 ..... K) by the rules expressed in
      the corresponding L1 elements.

      When the condition of an L1 is no longer true
      the 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 26­31, 1962, Gordon and Beech Science Publishers, 1962. view details
    3. Stock, Karl F. "A listing of some programming languages and their users" in RZ-Informationen. Graz: Rechenzentrum Graz 1971 182 view details Abstract: 321 Programmiersprachen mit Angabe der Computer-Hersteller, auf deren Anlagen die entsprechenden Sprachen verwendet werden kennen. Register der 74 Computer-Firmen; Reihenfolge der Programmiersprachen nach der Anzahl der Herstellerfirmen, auf deren Anlagen die Sprache implementiert ist; Reihenfolge der Herstellerfirmen nach der Anzahl der verwendeten Programmiersprachen.

      [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 26­31, 1962, Gordon and Beech Science Publishers, 1962. view details
    4. Sammet, Jean E., "Roster of Programming Languages 1972" 203 view details
            in Computers & Automation 21(6B), 30 Aug 1972 view details
    5. Stock, Marylene and Stock, Karl F. "Bibliography of Programming Languages: Books, User Manuals and Articles from PLANKALKUL to PL/I" Verlag Dokumentation, Pullach/Munchen 1973 444 view details Abstract: PREFACE  AND  INTRODUCTION
      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