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.
This is a preview of subscription content, access via your institution.
McCarthy, John. Recursive functions of symbolic expressions and their computation by machine, part I. Communications of the ACM, 3(4):184–195, April 1960.
Landin, Peter J. The next 700 programming languages. Communications of the ACM, 9(3):157–166, March 1966.
Evans, Jr., Arthur. PAL - A language designed for teaching programming linguistics. In Proceedings of 23rd National ACM Conference, pages 395–403. Brandin/Systems Press, Princeton, New Jersey, 1968.
Reynolds, John C. GEDANKEN - A simple typeless language based on the principle of completeness and the reference concept. Communications of the ACM, 13(5):308–319, May 1970.
Church, Alonzo. The Calculi of Lambda-Conversion, volume 6 of Annals of Mathematics Studies. Princeton University Press, Princeton, New Jersey, 1941.
Curry, Haskell Brookes and Feys, Robert. Combinatory Logic, Volume 1. Studies in Logic and the Foundations of Mathematics. North-Holland, Amsterdam, 1958. Second printing 1968.
Landin, Peter J. A λ-calculus approach. In Leslie Fox, editor, Advances in Programming and Non-Numerical Computation: Proceedings of A Summer School, pages 97–141. Oxford University Computing Laboratory and Delegacy for Extra-Mural Studies, Pergamon Press, Oxford, England, 1966.
Floyd, Robert W. Assigning meanings to programs. In J. T. Schwartz, editor, Mathematical Aspects of Computer Science, volume 19 of Proceedings of Symposia in Applied Mathematics, pages 19–32, New York City, April 5-7, 1966. American Mathematical Society, Providence, Rhode Island, 1967.
Manna, Zohar. The correctness of programs. Journal of Computer and System Sciences, 3(2):119–127, May 1969.
Hoare, C. A. R. An axiomatic basis for computer programming. Communications of the ACM, 12(10):576–580 and 583, October 1969. Reprinted in .
Gries, David, editor. Programming Methodology. Springer-Verlag, New York, 1978.
Scott, Dana S. Outline of a mathematical theory of computation. Technical Monograph PRG-2, Programming Research Group, Oxford University Computing Laboratory, Oxford, England, November 1970. A preliminary version appeared in Proceedings of the Fourth Annual Princeton Conference on Information Sciences and Systems (1970), 169-176.
Scott, Dana S. Lattice theory, data types and semantics. In Randell Rustin, editor, Formal Semantics of Programming Languages: Courant Computer Science Symposium 2, pages 65–106, New York University, New York, September 14-16, 1970. Prentice-Hall, Englewood Cliffs, New Jersey, 1972.
Scott, Dana S. Models for various type-free calculi. In Patrick Suppes, Leon Henkin, Athanase Joja, and Gr. C. Moisil, editors, Logic, Methodology and Philosophy of Science IV: Proceedings of the Fourth International Congress, volume 74 of Studies in Logic and the Foundations of Mathematics, pages 157–187, Bucharest, Romania, August 29-September 4, 1971. North-Holland, Amsterdam, 1973.
Scott, Dana S. Continuous lattices. In F. William Lawvere, editor, Toposes, Algebraic Geometry and Logic, volume 274 of Lecture Notes in Mathematics, Dalhousie University, Halifax, Nova Scotia, January 16-19, 1971. Springer-Verlag, Berlin, 1972.
Milner, Robin. Implementation and applications of Scott's logic for computable functions. In Proceedings of an ACM Conference on Proving Assertions about Programs, pages 1–6, Las Cruces,New Mexico, January 6-7, 1972. ACM, New York. SIGPLAN Notices Volume 7, Number nu1 and SIGACT News, Number 14.
Burstall, Rodney M. Formal description of program structure and semantics in first order logic. In Bernard Meltzer and Donald Michie, editors, Machine Intelligence 5, pages 79–98. Edinburgh University Press, Edinburgh, Scotland, 1969.
Lucas, Peter, Lauer, Peter E., and Stigleitner, H. Method and notation for the formal definition of programming languages. Technical Report TR 25.087, IBM Laboratory Vienna, June 28, 1968. Revised July 1, 1970.
Reynolds, John C. GEDANKEN - a simple typeless language which permits functional data structures and coroutines. Report ANL-7621, Applied Mathematics Division, Argonne National Laboratory, Argonne, Illinois, September 1969.
Morris, F. Lockwood. The next 700 formal language descriptions. Lisp and Symbolic Computation, 6(3- 4):249–257, November 1993. Original manuscript dated November 1970.
de Bakker, Jaco W. Semantics of programming languages. In Julius T. Tou, editor, Advances in Information Systems Science, volume 2, chapter 3, pages 173–227. Plenum Press, New York, 1969.
Park, David M. R. Fixpoint induction and proofs of program properties. In Bernard Meltzer and Donald Michie, editors, Machine Intelligence 5, pages 59–78. Edinburgh University Press, Edinburgh, 1969.
Feldman, Jerome and Gries, David. Translator writing systems. Communications of the ACM, 11(2):77–113, February 1968.
McCarthy, John. Towards a mathematical science of computation. In Cicely M. Popplewell, editor, Information Processing 62: Proceedings of IFIP Congress 1962, pages 21–28, Munich, August 27-September 1, 1962. North-Holland, Amsterdam, 1963.
Wozencraft, John M. and Evans, Jr., Arthur. Notes on programming linguistics. Technical report, Department of Electrical Engineering, Massachusetts Institute of Technology, Cambridge, Massachusetts, February 1971.
van Wijngaarden, Adriaan. Recursive definition of syntax and semantics. In T. B. Steel, Jr., editor, Formal Language Description Languages for Computer Programming: Proceedings of the IFIP Working Conference on Formal Language Description Languages, pages 13–24, Baden bei Wien, Austria, September 15-18, 1964. North-Holland, Amsterdam, 1966.
Morris, Jr., James H. A bonus from van Wijngaarden's device. Communications of the ACM, 15(8):773, August 1972.
Fischer, Michael J. Lambda calculus schemata. In Proceedings of an ACM Conference on Proving Assertions about Programs, pages 104–109, Las Cruces, New Mexico, January 6-7, 1972. ACM, New York.
Landin, Peter J. A correspondence between ALGOL 60 and Church's lambda-notation. Communications of the ACM, 8(2-3):89–101, 158-165, February-March 1965.
Barron, D.W., Buxton, John N., Hartley, D.F., Nixon, E., and Strachey, Christopher. The main features of CPL. The Computer Journal, 6:134–143, July 1963.
van Wijngaarden, Adriaan, Mailloux, B.J., Peck, J.E.L., and Koster, C.H.A. Report on the algorithmic language ALGOL 68. Numerische Mathematik, 14(2):79–218, 1969.
Cheatham, Jr., T.E., Fischer, Alice, and Jorrand, P. On the basis for ELF - an extensible language facility. In 1968 Fall Joint Computer Conference, volume 33, Part Two of AFIPS Conference Proceedings, pages 937–948, San Francisco, December 9-11, 1968. Thompson Book Company, Washington, D.C.
About this article
Cite this article
Reynolds, J.C. Definitional Interpreters for Higher-Order Programming Languages. Higher-Order and Symbolic Computation 11, 363–397 (1998). https://doi.org/10.1023/A:1010027404223
- programming language
- language definition
- lambda calculus
- applicative language
- higher-order function
- order of application
- SECD machine