Scheme (programming language)

SchemeScheme programming languageR6RSR5RSR4RSScheme language.scmdefineR5RS SchemeR7RS
Scheme is a programming language that supports multiple paradigms, including functional and imperative programming.wikipedia
433 Related Articles

Lisp (programming language)

LispLisp programming languageLisp 1.5
It is one of the three main dialects of Lisp, alongside Common Lisp and Clojure.
Today, the best-known general-purpose Lisp dialects are Clojure, Common Lisp, and Scheme.

History of the Scheme programming language

Lambda Papers
Scheme was created during the 1970s at the MIT AI Lab and released by its developers, Guy L. Steele and Gerald Jay Sussman, via a series of memos now known as the Lambda Papers.
The history of the programming language Scheme begins with the development of earlier members of the Lisp family of languages during the second half of the twentieth century.

Functional programming

functionalfunctional programming languagefunctional language
Scheme is a programming language that supports multiple paradigms, including functional and imperative programming.
However, programming languages that support functional programming have been used in industry, including Common Lisp, Scheme, Clojure, Wolfram Language, Racket, Erlang, OCaml, Haskell, and F#.

Programming paradigm

Multi-paradigmmulti-paradigm programming languageprogramming paradigms
Scheme is a programming language that supports multiple paradigms, including functional and imperative programming.
Some languages are designed to support one paradigm (Smalltalk supports object-oriented programming, Haskell supports functional programming), while other programming languages support multiple paradigms (such as Object Pascal, C++, Java, JavaScript, C#, Scala, Visual Basic, Common Lisp, Scheme, Perl, PHP, Python, Ruby, Wolfram Language, Oz, and F#).

Numerical tower

numeric tower
Compliant implementations are now required to support Scheme's full numeric tower, and the semantics of numbers have been expanded, mainly in the direction of support for the IEEE 754 standard for floating point numerical representation.
In Scheme and in Lisp dialects inspired by it, a numerical tower is the set of data types that represent numbers in a given programming language.

Carl Hewitt

Hewitt, Carl
Scheme started in the 1970s as an attempt to understand Carl Hewitt's Actor model, for which purpose Steele and Sussman wrote a "tiny Lisp interpreter" using Maclisp and then "added mechanisms for creating actors and sending messages".
The actor model influenced the development of the Scheme programming language, the π-calculus, and served as an inspiration for several other programming languages.

Continuation

continuationscalloutscontinuation-based web programming
It was also one of the first programming languages to support first-class continuations.
Scheme was the first full production system, providing first "catch" and then call/cc.

S-expression

S-expressionsfully parenthesized prefix notationparentheses
Scheme's very simple syntax is based on s-expressions, parenthesized lists in which a prefix operator is followed by its arguments.
where is the special end-of-list object (alternatively written, which is the only representation in Scheme ).

First-class function

first-classfirst classFirst class function
Scheme uses strictly but dynamically typed variables and supports first class procedures.
Proper support for lexically scoped first-class functions was introduced in Scheme and requires handling references to functions as closures instead of bare function pointers, which in turn makes garbage collection a necessity.

First-class citizen

first-class objectfirst-classfirst class
It was also one of the first programming languages to support first-class continuations.

Closure (computer programming)

closuresclosurelexical closure
The key insights on how to introduce lexical scoping into a Lisp dialect were popularized in Sussman and Steele's 1975 Lambda Paper, "Scheme: An Interpreter for Extended Lambda Calculus", where they adopted the concept of the lexical closure (on page 21), which had been described in an AI Memo in 1970 by Joel Moses, who attributed the idea to Peter J. Landin.
This usage was subsequently adopted by Sussman and Steele when they defined Scheme in 1975, a lexically scoped variant of LISP, and became widespread.

ALGOL

ALGOL 60ALGOL programming languageALGOrithmic Language
The impetus to incorporate lexical scoping, which was an unusual scoping model in the early 1970s, into their new version of Lisp, came from Sussman's studies of ALGOL.
The Scheme programming language, a variant of Lisp that adopted the block structure and lexical scope of ALGOL, also adopted the wording "Revised Report on the Algorithmic Language Scheme" for its standards documents in homage to ALGOL.

Continuation-passing style

direct stylecontinuation passing stylecontinuation-passing-style
They introduced continuation-passing style along with their first description of Scheme in the first of the Lambda Papers, and in subsequent papers, they proceeded to demonstrate the raw power of this practical use of lambda calculus.
Gerald Jay Sussman and Guy L. Steele, Jr. coined the phrase in AI Memo 349 (1975), which sets out the first version of the Scheme programming language.

Maclisp

Scheme started in the 1970s as an attempt to understand Carl Hewitt's Actor model, for which purpose Steele and Sussman wrote a "tiny Lisp interpreter" using Maclisp and then "added mechanisms for creating actors and sending messages".
It was also used to implement other programming languages, such as Planner and Scheme.

Programming language

programming languageslanguagedialect
It is one of the three main dialects of Lisp, alongside Common Lisp and Clojure. Scheme is a programming language that supports multiple paradigms, including functional and imperative programming.
Conversely, Scheme contains multiple coherent subsets that suffice to construct the rest of the language as library macros, and so the language designers do not even bother to say which portions of the language must be implemented as language constructs, and which must be implemented as parts of a library.

Common Lisp

QuicklispANSI Common LispArmed Bear Common Lisp
It is one of the three main dialects of Lisp, alongside Common Lisp and Clojure. Among popular ones are syntactic closures, explicit renaming macros and, a non-hygienic macro system similar to system provided in Common Lisp.
This is a key difference between Common Lisp and Scheme.

Hygienic macro

hygienicHygienic macrosdefine-syntax
Among popular ones are syntactic closures, explicit renaming macros and, a non-hygienic macro system similar to system provided in Common Lisp.
They are a feature of programming languages such as Scheme, Dylan and Rust.

Minimalism (computing)

minimalistminimalisticminimalism
Unlike Common Lisp, Scheme follows a minimalist design philosophy, specifying a small standard core with powerful tools for language extension.
Scheme, Forth, and Go are cited as examples of practical, minimal programming languages.

Scope (computer science)

scopelexical scopeLexical
It was the first dialect of Lisp to choose lexical scope and the first to require implementations to perform tail-call optimization, giving stronger support for functional programming and associated techniques such as recursive algorithms.
The original Lisp interpreter (1960) and most early Lisps used dynamic scoping, but descendants of dynamically scoped languages often adopt static scoping; Common Lisp and Scheme (with SRFI 15) have both dynamic and static scoping.

Incompatible Timesharing System

ITSITS operating systemIncompatible Time-sharing System
The current name resulted from the authors' use of the ITS operating system, which limited filenames to two components of at most six characters each.
Several important programming languages and systems were developed on ITS, including MacLisp (the precursor of Zetalisp and Common Lisp), Microplanner (implemented in MacLisp), MDL (which became the basis of Infocom's programming environment), and Scheme.

Chicken (Scheme implementation)

ChickenChicken SchemeChicken Scheme compiler
The Gambit, Chicken, and Bigloo Scheme interpreters compile Scheme to C, which makes embedding particularly easy.
Chicken (stylized as CHICKEN) is a programming language, specifically a compiler and interpreter which implement a dialect of the programming language Scheme, and which compiles Scheme source code to standard C.

Gambit (scheme implementation)

GambitGambit SchemeGambit-C Scheme
The Gambit, Chicken, and Bigloo Scheme interpreters compile Scheme to C, which makes embedding particularly easy.
Gambit, also called Gambit-C, is a programming language, a variant of the language family Lisp, and its variants named Scheme.

Tail call

tail recursiontail-recursivetail call optimization
It was the first dialect of Lisp to choose lexical scope and the first to require implementations to perform tail-call optimization, giving stronger support for functional programming and associated techniques such as recursive algorithms.
Tail call elimination is thus required by the standard definitions of some programming languages, such as Scheme, and languages in the ML family among others.

Bigloo

The Gambit, Chicken, and Bigloo Scheme interpreters compile Scheme to C, which makes embedding particularly easy.
Bigloo is a programming language, a dialect of the language Lisp, an implementation of the language Scheme.

Racket (programming language)

RacketDrRacketPLT
For the past 12 years, PLT has run the ProgramByDesign (formerly TeachScheme!) project, which has exposed close to 600 high school teachers and thousands of high school students to rudimentary Scheme programming.
Racket is a general-purpose, multi-paradigm programming language based on the Scheme dialect of Lisp.