Scheme was created in 1975 at the MIT Artificial Intelligence Laboratory by Guy L. Steele Jr. and Gerald Jay Sussman. The short answer to why Steele and Sussman created Scheme at MIT is that they wanted to understand Carl Hewitt's actor model of computation, and the best way to understand it was to build a small interpreter. What came out was a Lisp dialect so compact and so cleanly defined that it reshaped how computer science is taught.
Why Steele and Sussman created Scheme at MIT
Hewitt's actors were independent agents that communicated by sending messages. Sussman and Steele, then a graduate student, wrote a tiny Lisp interpreter with actors added, in Maclisp. While building it they noticed that the code for creating an actor and the code for creating a closure (a lambda that captures its environment) were essentially identical. Sending a message and calling a function were the same operation. The actors could go; closures and lexical scope were enough.
They named it "Schemer", in the tradition of AI languages Planner and Conniver, but the file system of the ITS operating system limited names to six characters, so it became Scheme. Between 1975 and 1980 they published the Lambda Papers, a series of MIT AI memos with titles such as "Lambda: The Ultimate Imperative" and "Lambda: The Ultimate Declarative", which showed how loops, gotos and assignments could all be expressed with procedures.
Design and key features of Scheme
- Lexical scoping: variables refer to the binding visible where the code was written. Most Lisps of the time used dynamic scope.
- Proper tail calls: a call in tail position does not grow the stack, so recursion can replace loops safely. The standard requires it.
- First-class procedures, and a single namespace for functions and variables (a "Lisp-1").
- First-class continuations through
call-with-current-continuation, which can express exceptions, generators and coroutines. - Hygienic macros with
syntax-rules, avoiding accidental variable capture. - A small core: the R5RS report of 1998 runs to about 50 pages.
(define (factorial n)
(let loop ((i n) (acc 1))
(if (= i 0)
acc
(loop (- i 1) (* acc i)))))
(factorial 20) ; => 2432902008176640000
(define (make-counter)
(let ((count 0))
(lambda ()
(set! count (+ count 1))
count)))
The named let in factorial looks like recursion but runs as a loop, because the call to loop is a tail call. make-counter returns a closure that keeps its own private count, which is the same pattern Steele and Sussman spotted in Hewitt's actors.
The RnRS reports
Scheme is defined by a series of reports titled "Revisedn Report on the Algorithmic Language Scheme", a nod to the ALGOL 60 report.
| Report | Year | Notes |
|---|---|---|
| Original report | 1975 | MIT AI Memo 349 |
| R2RS / R3RS | 1985 / 1986 | Community revisions |
| R4RS | 1991 | Basis of IEEE 1178-1990 standard |
| R5RS | 1998 | Hygienic macros, dynamic-wind; widely implemented |
| R6RS | 2007 | Libraries, Unicode; much larger and controversial |
| R7RS-small | 2013 | Return to a compact core |
SICP and Scheme in education
In 1985 Harold Abelson and Gerald Jay Sussman, with Julie Sussman, published Structure and Interpretation of Computer Programs. SICP used Scheme to teach MIT's introductory course 6.001 for over two decades and influenced curricula worldwide. Rice University's TeachScheme! project, later Program by Design, led to How to Design Programs and the DrScheme environment, which grew into Racket.
Notable implementations and uses
Major implementations include Chez Scheme (by R. Kent Dybvig, open-sourced in 2016), Racket (whose runtime has been built on Chez Scheme since Racket CS), GNU Guile, the official extension language of the GNU Project, plus Chicken, Gambit, Gauche, Chibi and MIT/GNU Scheme. GIMP's Script-Fu uses a small Scheme interpreter, and GNU Guix defines its whole package system in Guile Scheme.
Influence and legacy
Common Lisp adopted lexical scope partly because of Scheme. Brendan Eich has said he was recruited to Netscape with the promise of putting Scheme in the browser; JavaScript ended up with Java-like syntax but Scheme-like closures and first-class functions. Clojure, Lua, R and Julia show Scheme's influence, and Steele went on to co-author the Java language specification.
Is Scheme still used today?
Yes, though mostly in education, research and as an embedded scripting language. Racket and Guile have active communities, and Chez Scheme is a respected high-performance compiler. Knowing why Steele and Sussman created Scheme at MIT, as a way to understand actors that ended with closures and lexical scope, explains why the language still feels like a distilled version of every idea in Lisp.
Frequently asked questions
Why is it called Scheme and not Schemer?
The authors chose "Schemer" to follow the naming of earlier AI languages Planner and Conniver. The ITS operating system on MIT's PDP-10 limited file names to six characters, so the name was cut to "Scheme" and it stuck.
What is the difference between Scheme and Common Lisp?
Scheme has a small standard, a single namespace for functions and variables, mandatory tail call optimisation and first-class continuations. Common Lisp is much larger, has separate function and variable namespaces, and includes an object system and extensive libraries in the standard itself.
Is SICP still taught with Scheme?
MIT replaced its Scheme-based 6.001 course with a Python-based course around 2008. Many universities and self-learners still work through SICP in Scheme or Racket, and a JavaScript edition of the book was published in 2022.







