Skip to main content

Definitional Interpreters for Higher-Order Programming Languages

Abstract

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.

References

  1. 1.

    McCarthy, John. Recursive functions of symbolic expressions and their computation by machine, part I. Communications of the ACM, 3(4):184–195, April 1960.

    Google Scholar 

  2. 2.

    Landin, Peter J. The next 700 programming languages. Communications of the ACM, 9(3):157–166, March 1966.

    Google Scholar 

  3. 3.

    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.

    Google Scholar 

  4. 4.

    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.

    Google Scholar 

  5. 5.

    Church, Alonzo. The Calculi of Lambda-Conversion, volume 6 of Annals of Mathematics Studies. Princeton University Press, Princeton, New Jersey, 1941.

    Google Scholar 

  6. 6.

    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.

    Google Scholar 

  7. 7.

    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.

    Google Scholar 

  8. 8.

    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.

    Google Scholar 

  9. 9.

    Manna, Zohar. The correctness of programs. Journal of Computer and System Sciences, 3(2):119–127, May 1969.

    Google Scholar 

  10. 10.

    Hoare, C. A. R. An axiomatic basis for computer programming. Communications of the ACM, 12(10):576–580 and 583, October 1969. Reprinted in [11].

    Google Scholar 

  11. 11.

    Gries, David, editor. Programming Methodology. Springer-Verlag, New York, 1978.

    Google Scholar 

  12. 12.

    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.

  13. 13.

    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.

    Google Scholar 

  14. 14.

    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.

    Google Scholar 

  15. 15.

    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.

    Google Scholar 

  16. 16.

    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.

    Google Scholar 

  17. 17.

    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.

    Google Scholar 

  18. 18.

    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.

  19. 19.

    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.

  20. 20.

    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.

    Google Scholar 

  21. 21.

    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.

    Google Scholar 

  22. 22.

    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.

    Google Scholar 

  23. 23.

    Feldman, Jerome and Gries, David. Translator writing systems. Communications of the ACM, 11(2):77–113, February 1968.

    Google Scholar 

  24. 24.

    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.

    Google Scholar 

  25. 25.

    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.

  26. 26.

    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.

    Google Scholar 

  27. 27.

    Morris, Jr., James H. A bonus from van Wijngaarden's device. Communications of the ACM, 15(8):773, August 1972.

    Google Scholar 

  28. 28.

    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.

    Google Scholar 

  29. 29.

    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.

    Google Scholar 

  30. 30.

    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.

    Google Scholar 

  31. 31.

    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.

    Google Scholar 

  32. 32.

    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.

    Google Scholar 

Download references

Author information

Affiliations

Authors

Rights and permissions

Reprints and Permissions

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

Download citation

  • programming language
  • language definition
  • interpreter
  • lambda calculus
  • applicative language
  • higher-order function
  • closure
  • order of application
  • continuation
  • LISP
  • GEDANKEN
  • PAL
  • SECD machine
  • J-operator
  • reference