Definitional Interpreters for Higher-Order Programming Languages

Higher-order programming languages (i.e., languages in which procedures or labels can occur as values) are usually defined by interpreters which are themselves written in a programming language based on the lambda calculus (i.e., an applicative language such as pure LISP). Examples include McCarthy's definition of LISP, Landin's SECD machine, the Vienna definition of PL/I, Reynolds' definitions of GEDANKEN, and recent unpublished work by L. Morris and C. Wadsworth. Such definitions can be classified according to whether the interpreter contains higher-order functions, and whether the order of application (i.e., call-by-value versus call-by-name) in the defined language depends upon the order of application in the defining language. As an example, we consider the definition of a simple applicative programming language by means of an interpreter written in a similar language. Definitions in each of the above classifications are derived from one another by informal but constructive methods. The treatment of imperative features such as jumps and assignment is also discussed.

[1]  G. G. Stokes "J." , 1890, The New Yale Book of Quotations.

[2]  A. Church The calculi of lambda-conversion , 1941 .

[3]  Haskell B. Curry,et al.  Combinatory Logic, Volume I , 1959 .

[4]  John McCarthy,et al.  Recursive functions of symbolic expressions and their computation by machine, Part I , 1960, Commun. ACM.

[5]  John McCarthy,et al.  Towards a Mathematical Science of Computation , 1962, IFIP Congress.

[6]  D. W. Barron,et al.  The Main Features of CPL , 1963, Comput. J..

[7]  P. J. Landin,et al.  Correspondence between ALGOL 60 and Church's Lambda-notation , 1965, Commun. ACM.

[8]  P. J. Landin,et al.  The next 700 programming languages , 1966, CACM.

[9]  R. M. Burstall,et al.  Advances in programming and non-numerical computation , 1967, The Mathematical Gazette.

[10]  van A. Wijngaarden Recursive definition of syntax and semantics : (proceedings ifip working conference on formal language description languages, vienna 1966, p 13-24) , 1966 .

[11]  P. J. Landin A λ-CALCULUS APPROACH , 1966 .

[12]  Robert W. Floyd,et al.  Assigning meaning to programs , 1967 .

[13]  Jerome A. Feldman,et al.  Translator writing systems , 1968, Commun. ACM.

[14]  A. Evans PAL—a language designed for teaching programming linguistics , 1968, ACM National Conference.

[15]  Thomas E. Cheatham,et al.  On the basis for ELF: an extensible language facility , 1968, AFIPS '68 (Fall, part II).

[16]  ZOHAR MANNA,et al.  The Correctness of Programs , 1969, J. Comput. Syst. Sci..

[17]  J. W. de Bakker,et al.  Semantics of Programming Languages , 1969 .

[18]  John C. Reynolds,et al.  GEDANKEN: A SIMPLE TYPELESS LANGUAGE WHICH PERMITS FUNCTIONAL DATA STRUCTURES AND COROUTINES. , 1969 .

[19]  B. J. Mailloux,et al.  Report on the Algorithmic Language ALGOL 68 , 1969 .

[20]  B. J. Mailloux,et al.  Report of Algorithmic Language ALGOL 68 , 1969 .

[21]  Dana S. Scott,et al.  Outline of a Mathematical Theory of Computation , 1970 .

[22]  J. Bormann A. van Wijngaarden (Ed.), B. J. Mailloux, J. E. L. Peck and C. H. A. Koster, Report on the Algorithmic Language ALGOL 68. Amsterdam 1969. Printing by the Mathematisch Centrum. Preis brosch. $ 4.50 . , 1970 .

[23]  John C. Reynolds,et al.  GEDANKEN—a simple typeless language based on the principle of completeness and the reference concept , 1970, Commun. ACM.

[24]  A. S. Douglas,et al.  Report on the Algorithmic Language, Algol 68. , 1970 .

[25]  James H. Morris A bonus from van Wijngaarden's device , 1972, CACM.

[26]  Robin Milner,et al.  Implementation and applications of Scott's logic for computable functions , 1972, Proving Assertions About Programs.

[27]  Michael J. Fischer Lambda calculus schemata , 1972 .

[28]  D. Scott Models for Various Type-Free Calculi , 1973 .

[29]  Annabelle McIver,et al.  Programming Methodology , 1974, Lecture Notes in Computer Science.