Scheme is a statically scoped and properly tail-recursive dialect of the Lisp programming language designed by Guy Lewis Steele Jr. and Gerald Jay Sussman.

Scheme and Common Lisp are the two main Lisp dialects in use today. They represent two opposite examples of how a language can evolve. Both Lisps look very much alike, especially if you are approaching them from the Java or C++ worlds. They are strangely full of parenthesis, for example. But they also have important differences, mainly as a result of their design philosophy. The more visible is their size. The main objective of the CL committee was to incorporate in the new language most of the features of the preceding Lisp dialects (a one and only, a 'Common' Lisp). In contrast, Scheme designers removed everything considered superfluous from the core (and left a core, with no standard libraries).

  • Scheme doesn't have a specification for structures with named fields or object oriented programming, while there are some language implementations and libraries (non standardized) that include these and more. A macro facility was incorporated later to the standard, but it is not identical to its Common Lisp counterpart. Considered safer but more restrictive, Scheme macros are known as Hygienic Macros.
  • Scheme is a dialect of Lisp that stresses conceptual elegance and simplicity. It was also one of the first and few programming languages to fully support continuations. It is much smaller than Common Lisp; the language specification is about 50 pages, compared to Common Lisp's 1300 page draft standard. Advocates of Scheme often find it amusing that the entire Scheme standard is shorter than the index to Guy Steele's Common Lisp: the Language, 2nd Edition. Unlike the Scheme standard, the Common Lisp standard has a large library of utility functions, a standard object-oriented programming facility (CLOS), and a sophisticated condition handling system.
  • Scheme was the first dialect of Lisp to use lexical variable scoping (or "static scoping").
Precisely because of these characteristics, Scheme has been used successfully in computer science courses. The SICP book of Abelson, Sussman and Sussman, and their courses at MIT, are the best example. There are few "real world use" examples of Scheme. Nevertheless, being small and clear, it can be very well used as an embedded language (as intended by the GNU Guile project). Certainly, good compilers can be found, including some in Java, but Scheme shines as a very efficient interpreted language.

There has been some buzz recently about the benefits of using Continuation Passing Style (CPS) to facilitate user interaction in Web applications. UnCommon Web (UCW) is an example of how this can be done in Common Lisp. The acknowledged lisp writer and programmer Paul Graham is known to have applied a similar approach (using lexical closures to simulate subroutine-like behavior), among other many advantages given by Lisp, to program important parts of his successful web startup Viaweb (now Yahoo! Store). Considering that Scheme shares most of the benefits of Lisp and supports continuations natively, it clearly is a strong candidate for a continuation-based Web Framework.