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 that 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]  D. W. Barron,et al.  The Main Features of CPL , 1963, Comput. J..

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

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

[4]  Lockwood Morris The next 700 formal language descriptions , 1993, LISP Symb. Comput..

[5]  Arthur Evans PAL—a language designed for teaching programming linguistics , 1968, ACM '68.

[6]  C. A. R. Hoare,et al.  An axiomatic basis for computer programming , 1969, CACM.

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

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

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

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

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

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

[13]  Robin Milner Implementation and applications of Scott's logic for computable functions , 1972 .

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

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

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

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

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

[19]  Robert W. Floyd,et al.  Assigning Meanings to Programs , 1993 .

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

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

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

[23]  A. Church The Calculi of Lambda Conversion. (AM-6) (Annals of Mathematics Studies) , 1985 .