Higher-Order and Symbolic Computation

, Volume 11, Issue 4, pp 405–439 | Cite as

Scheme: A Interpreter for Extended Lambda Calculus

  • Gerald Jay Sussman
  • Guy L. SteeleJr.


Inspired by ACTORS [7, 17], we have implemented an interpreter for a LISP-like language, SCHEME, based on the lambda calculus [2], but extended for side effects, multiprocessing, and process synchronization. The purpose of this implementation is tutorial. We wish to: 1.alleviate the confusion caused by Micro-PLANNER, CONNIVER, etc., by clarifying the embedding of non-recursive control structures in a recursive host language like LISP. 2.explain how to use these control structures, independent of such issues as pattern matching and data base manipulation. 3.have a simple concrete experimental domain for certain issues of programming semantics and style. This paper is organized into sections. The first section is a short “reference manual” containing specifications for all the unusual features of SCHEME. Next, we present a sequence of programming examples which illustrate various programming styles, and how to use them. This will raise certain issues of semantics which we will try to clarify with lambda calculus in the third section. In the fourth section we will give a general discussion of the issues facing an implementor of an interpreter for a language based on lambda calculus. Finally, we will present a completely annotated interpreter for SCHEME, written in MacLISP [13], to acquaint programmers with the tricks of the trade of implementing non-recursive control structures in a recursive language like LISP.

This report describes research done at the Artificial Intelligence Laboratory of the Massachusetts Institute of Technology. Support for the laboratory's artificial intelligence research is provided in part by the Advanced Research Projects Agency of the Department of Defense under Office of Naval Research contract N00014-75-C-0643.


Artificial Intelligence Pattern Match Massachusetts Institute Naval Research Unusual Feature 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Bobrow, Daniel G. and Wegbreit, Ben. A model and stack implementation of multiple environments. CACM 16, 10, pages 591–603, October 1973.Google Scholar
  2. 2.
    Church, Alonzo. The calculi of lambda conversion. Annals of Mathematics Studies Number 6, Princeton University Press, 1941. Reprinted by Klaus Reprint Corp. (New York), 1965.Google Scholar
  3. 3.
    Dijkstra, Edsger W. Solution of a problem in concurrent programming control. CACM 8,9, page 569, September 1965.Google Scholar
  4. 4.
    Fischer, Michael J. Lambda calculus schemata. In Proceedings of ACM Conference on Proving Assertions about Programs, SIGPLAN Notices, January 1972.Google Scholar
  5. 5.
    Galley, S.W. and Pfister, Greg. The MDL language. In Programming Technology Division Document SYS.11.01. Project MAC, MIT (Cambridge), November 1975.Google Scholar
  6. 6.
    Greif, Irene. Semantics of Communicating Parallel Processes. Ph.D. thesis. Technical Report MAC-TR-154, Project MAC, MIT (Cambridge), September 1975.Google Scholar
  7. 7.
    Greif, Irene and Hewitt, Carl. Actor semantics of Planner-73. Technical Report Working Paper 81, MIT AI Lab (Cambridge), 1975.Google Scholar
  8. 8.
    Ingerman, P.Z. Thunks-a way of compiling procedure statements with some comments on procedure declarations. CACM 4,1, pages 55–58, January 1961.Google Scholar
  9. 9.
    Knuth, Donald E. Additional comments on a problem in concurrent programming control. CACM 9,5, pages 321–322, May 1966.Google Scholar
  10. 10.
    Lamport, Leslie. A new solution of Dijkstra's concurrent programming problem. CACM 17,8, pages 453–455, August 1974.Google Scholar
  11. 11.
    McCarthy, John, et al. LISP 1.5 Programmer's Manual. The MIT Press (Cambridge), 1965.Google Scholar
  12. 12.
    McDermott, Drew V. and Sussman, Gerald Jay. The CONNIVER reference manual. Technical Report AI Memo 295a, MIT AI Lab (Cambridge), January 1974.Google Scholar
  13. 13.
    Moon, David A. MACLISP Reference Manual, Revision 0. Project MAC, MIT (Cambridge), 1974.Google Scholar
  14. 14.
    Moses, Joel. The function of FUNCTION in LISP. Technical Report AI Memo 199, MIT AI Lab (Cambridge), June 1970.Google Scholar
  15. 15.
    Project MAC, MIT. (Cambridge). Project MAC Progress Report XI (July 1973-July 1974), 1974.Google Scholar
  16. 16.
    Reynolds, John C. Definitional interpreters for higher order programming languages. In ACM Conference Proceedings, 1972.Google Scholar
  17. 17.
    Smith, Brian C. and Hewitt, Carl. A PLASMA primer (draft). Technical report, MIT AI Lab (Cambridge), October 1975.Google Scholar
  18. 18.
    Sussman, Gerald Jay, Winograd, Terry and Charniak, Eugene. Micro-PLANNER reference manual. Technical Report AI Memo 203A, MIT AI Lab (Cambridge), December 1971.Google Scholar

Copyright information

© Kluwer Academic Publishers 1998

Authors and Affiliations

  • Gerald Jay Sussman
    • 1
  • Guy L. SteeleJr.
    • 2
  1. 1.Massachusetts Institute of TechnologyCambridgeUSA
  2. 2.Sun Microsystems LabsChelmsfordUSA

Personalised recommendations