Scheme
 | | Paradigm: | multi-paradigm | | Appeared in: | 1970s | | Designed by: | Guy L. Steele and Gerald Jay Sussman | | Typing discipline: | strong, dynamic | | Major implementations: | PLT Scheme, MIT/GNU Scheme, Scheme 48, Chicken, Gambit, Guile, Bigloo, Chez Scheme, STk, STklos, Larceny, SCM, Kawa | | Dialects: | T | | Influenced by: | Lisp, ALGOL | | Influenced: | Common Lisp, JavaScript, Ruby | | Scheme is a multi-paradigm programming language. It is one of the two main dialects of Lisp and supports a number of programming paradigms but is best known for its support of functional programming. It was developed by Guy L. Steele and Gerald Jay Sussman in the 1970s. Scheme was introduced to the academic world via a series of papers now referred to as Sussman and Steele's Lambda Papers. There are two standards that define the Scheme language: the official IEEE standard, and a de facto standard called the Revisedn Report on the Algorithmic Language Scheme, nearly always abbreviated RnRS, where n is the number of the revision. The current standard is R5RS[1], and on August 28th, 2007, R6RS[2], the next major revision of the scheme language was ratified[3], with about 2/3rd of the voters in favor of R6RS. Image File history File links Lambda_lc. ...
A programming paradigm is a paradigmatic style of programming (compare with a methodology, which is a paradigmatic style of doing software engineering). ...
This does not cite any references or sources. ...
Guy Lewis Steele, Jr. ...
// Gerald Jay Sussman is the Panasonic Professor of Electrical Engineering at the Massachusetts Institute of Technology (MIT). ...
In computer science, a type system defines how a programming language classifies values and expressions into types, how it can manipulate those types and how they interact. ...
Look up Implementation in Wiktionary, the free dictionary. ...
PLT Scheme is an umbrella name for a family of implementations of the Scheme programming language. ...
MIT/GNU Scheme is a free software Scheme implementation. ...
Scheme 48 is a free software Scheme implementation using a bytecode interpreter. ...
Chicken is a compiler and interpreter for the Scheme programming language that compiles Scheme code to standard C. It is mostly R5RS compliant and offers many extensions to the standard. ...
Gambit, also called Gambit-C, is a free software Scheme implementation, consisting of a Scheme interpreter, and a compiler which compiles Scheme to C. Its documentation [1] claims conformance to the R4RS, R5RS, and IEEE standards, as well as several SRFI. Gambit home page Categories: | | | | ...
The GNU Guile logo GNU Guile (first released in 1993[1]) is an interpreter/virtual machine for the Scheme programming language and modularized extensions thereof (such as POSIX system call extensions or APL array functionality, packaged as a object[2] library (libguile) so that it can be embedded in other...
Bigloo is an implementation of the Scheme programming language developed at the French IT research institute INRIA. Bigloo home page Categories: | | | | ...
Chez Scheme is a commercial Scheme implementation by R. Kent Dybvig (author of The Scheme Programming Language), first released in 1985, which uses incremental native-code compilation to produce native binaries for the PowerPC, SPARC and x86 processor architectures. ...
STK stands for: Synthesis_Toolkit Storage Technology Corporation (StorageTek), a data storage company acquired in 2005 by Sun Microsystems SIM Tool Kit Satellite Tool Kit, an astrodynamics computer program from AGI. STK is stands for Shoot The Kids At School, the name of an internet message board founded by Matt M...
STklos is the Scheme which succeeded STk. ...
The Larceny Project is a set of computer programming languages, specifically Scheme implementations, using the Twobit optimizing Scheme compiler. ...
SCM is a free software Scheme implementation in C written by Aubrey Jaffer, the same author as the HOBBIT R4RS Scheme-to-C compiler, the SLIB Scheme library and the JACAL, interactive symbolic mathematics program. ...
The Kawa language framework is a computer software written in Java that implements the programming language Scheme. ...
A dialect of a programming language is a (relatively small) variation or extension of the language that does not change its intrinsic nature. ...
The T programming language is a dialect of the Lisp developed in the early 1980s by Jonathan A. Rees and Norman I. Adams of Yale University as an experiment in language design and implementation. ...
Lisp is a family of computer programming languages with a long history and a distinctive fully-parenthesized syntax. ...
Algol (β Per / Beta Persei) is a bright star in the constellation Perseus. ...
Common Lisp, commonly abbreviated CL, is a dialect of the Lisp programming language, published in ANSI standard X3. ...
It has been suggested that Client-side JavaScript be merged into this article or section. ...
Ruby is a reflective, dynamic, object-oriented programming language. ...
This does not cite any references or sources. ...
A dialect of a programming language is a (relatively small) variation or extension of the language that does not change its intrinsic nature. ...
Lisp is a family of computer programming languages with a long history and a distinctive fully-parenthesized syntax. ...
Functional programming is a programming paradigm that conceives computation as the evaluation of mathematical functions and avoids state and mutable data. ...
Guy Lewis Steele, Jr. ...
// Gerald Jay Sussman is the Panasonic Professor of Electrical Engineering at the Massachusetts Institute of Technology (MIT). ...
Lambda the Ultimate Papers were written by Gerald Jay Sussman and Guy Steele Jr. ...
The Institute of Electrical and Electronics Engineers or IEEE (pronounced as eye-triple-ee) is an international non-profit, professional organization incorporated in the State of New York, United States. ...
Scheme's philosophy is minimalist. Scheme provides as few primitive notions as possible, and, where practical, lets everything else be provided by programming libraries. This article does not cite any references or sources. ...
Illustration of an application which may use libvorbisfile. ...
Scheme was the first dialect of Lisp to choose static (a.k.a. lexical) over dynamic variable scope. It was also one of the first programming languages to support first-class continuations. In computer programming, scope is an enclosing context where values and expressions are associated. ...
In computing, a continuation is a representation of some of the execution state of a program (often the call stack and the current Instruction pointer) at a certain point. ...
Origin
Scheme started as an attempt to understand Carl Hewitt's Actor model.[4] Scheme was originally called "Schemer", in the tradition of other Lisp-derived languages like Planner or Conniver. 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. Currently, "Schemer" is commonly used to refer to a Scheme programmer. Carl E. Hewitt is an Associate Professor (Emeritus) in the Electrical Engineering and Computer Science department at the Massachusetts Institute of Technology (MIT). ...
In computer science, the Actor model is a mathematical model of concurrent computation that treats actors as the universal primitives of concurrent digital computation: in response to a message that it receives, an actor can make local decisions, create more actors, send more messages, and determine how to respond to...
Planner (often seen in publications as PLANNER) is a programming language designed by Carl Hewitt at MIT, and first published in 1969. ...
ITS, the Incompatible Timesharing System, was an early, revolutionary, and influential MIT time-sharing operating system; it was developed principally by the Artificial Intelligence Laboratory at MIT, with some help from Project MAC. ITS development was initiated in the late 1960s by those (the majority of the MIT AI Lab...
Future A new language standardization process began at the 2003 Scheme workshop, with the goal of producing an R6RS standard in 2006. It breaks with the earlier RnRS approach of unanimity. R6RS will feature a standard module system; allowing a split between the core language and libraries. A number of drafts of the R6RS specification have been released, the final version being R5.96RS on June 27th, 2007. A vote will determine whether this draft is accepted, with the announcement taking place on August 25th.[2] June 27 is the 178th day of the year (179th in leap years) in the Gregorian Calendar, with 187 days remaining. ...
August 25 is the 237th day of the year in the Gregorian Calendar (238th in leap years), with 129 days remaining. ...
Distinguishing features Scheme is a minimalist language. The current language standard[1] is only 50 pages, including a denotational semantics for the language core. The next revision of the standard will be expanded [2] to describe several libraries. Like all Lisp dialects, Scheme has a very simple syntax. There are no operator precedence rules because fully nested and parenthesized notation is used for all compound forms. Example (the recursive factorial function): Lisp is a family of computer programming languages with a long history and a distinctive fully-parenthesized syntax. ...
This article is about the concept of operator precedence. ...
An S-expression (S stands for symbolic) is a convention for representing data or an expression in a computer program in a text form. ...
For factorial rings in mathematics, see unique factorisation domain. ...
(define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) Scheme's macro system allows the user to add new syntactic constructs to the language. It respects the lexical scoping of the rest of the language, which avoids common programming errors that can occur in the macro systems of other programming languages. Procedures in Scheme are first-class values. In computer science, a programming language is said to support first-class functions if it treats functions as first-class objects. ...
Scheme's call-with-current-continuation operator allows the user to create non-local control constructs that must be built into other languages, such as iterators, coroutines, and backtracking. This page is about the computer science continuation. ...
In computer science, an iterator is an object which allows a programmer to traverse through all the elements of a collection, regardless of its specific implementation. ...
In computer science, coroutines are program components that generalize subroutines to allow multiple entry points and suspending and resuming of execution at certain locations. ...
Backtracking is a type of algorithm that is a refinement of brute force search. ...
Tail recursion -
Even though looping constructs (such as the do loop and named let) are provided in Scheme, and one can use macros to easily define iterating control structures, Scheme programs often use tail recursion to express loops, much more commonly than in other languages. This is in part due to the fact that Scheme implementations are required to optimize tail calls so as to eliminate use of stack space where possible, so that arbitrarily long loops are guaranteed to run in constant space.[1] In contrast, implementations of other languages often do not optimize tail calls, making tail recursion impractical due to a limited amount of stack. In computer science, tail recursion is a special case of recursion that can be easily transformed into an iteration. ...
In computer science, tail recursion is a special case of recursion that can be easily transformed into an iteration. ...
Language elements Comments Each comment is preceded by a semicolon (;) and extends for the rest of the line. Some implementations allow comments to span multiple lines by wrapping them with a #|...|# (possibly nested). Other implementations allow an entire s-expression to be commented out by prepending it with #;.[5] These two non-standard comment forms are included in the R6RS draft. A semicolon ( ; ) is a punctuation mark. ...
An S-expression (S stands for symbolic) is a convention for representing data or an expression in a computer program in a text form. ...
Variables Variables are dynamically typed. Variables are bound by a define, a let expression, and a few other Scheme forms. Variables bound at the top level with a define are in global scope. A define expression is equivalent to a let expression whose body is the rest of the current scope. Variables bound in a let are in scope for the body of the let. (let ((var1 value)) ... ; scope of var1 ...) let is a convenient syntax that is not fundamentally necessary. A let expression can be implemented using procedures directly. For example, the above is equivalent to: ((lambda (var1) ... ; scope of var1 ...) value) Functions 1 (define fun (lambda (arg1 arg2) ...)) 2 (define (fun arg1 arg2) ...) 3 (fun value1 value2) 4 (apply fun (list value1 value2)) Functions are first-class objects in Scheme. They can be arguments to other functions and be returned by them. They can be assigned to variables. Functions are created by lambda forms. For example a function with two arguments arg1 and arg2 is defined in line 1; line 2 is a shorter, equivalent form. line 3 shows how functions are applied. Note that the function being applied is in the first position of the list while the rest of the list contains the arguments. The apply function will take its first argument and apply it to a given list of arguments, so the previous function call can also be written as seen in line 4. In Scheme, functions are divided into two basic categories: procedures and primitives. All primitives are procedures, but not all procedures are primitives. Primitives are pre-defined functions in the Scheme language. These include +, -, *, /, set!, car, cdr, and other basic procedures. Procedures are user-defined functions. In several variations of Scheme, a user can redefine a primitive. For example, the code In computer programming, operator overloading (less commonly known as operator ad-hoc polymorphism) is a specific case of polymorphism in which some or all of operators like +, = or == have different implementations depending on the types of their arguments. ...
or simply actually redefines the + primitive to perform subtraction, rather than addition.
Lists -
Scheme uses the singly-linked list data structure with accessors car and cdr. In computer science, a linked list is one of the fundamental data structures. ...
Introduced in the Lisp programming language, car (IPA [kar], just like the English word car) and cdr (IPA [kÊ dÉr] or [ku dÉr]) are primitive operations upon linked lists composed of cons cells. ...
Data types Besides procedures and lists, Scheme provides the following data types: atomic symbols, numbers, booleans, characters, strings, vectors and ports.[1] Many Scheme implementations also offer association lists, hash tables and structures.[citation needed] Identifiers (IDs) are lexical tokens that name entities. ...
A number is an abstract idea used in counting and measuring. ...
In computer science, the Boolean datatype, sometimes called the logical datatype, is a primitive datatype having two values: one and zero (which are equivalent to true and false). ...
In computer programming and formal language theory, (and other branches of mathematics), a string is an ordered sequence of symbols. ...
This article does not cite any references or sources. ...
In computing, an associative array, also known as a map, lookup table, or dictionary, is an abstract data type very closely related to the mathematical concept of a function with a finite domain. ...
In computer science, a hash table is a data structure that speeds up searching for information by a particular aspect of that information, called a key. ...
This article does not cite any references or sources. ...
Since the IEEE Scheme standard and the R4RS Scheme standard, Scheme has asserted that all of the above types are disjoint, that is no value can belong to more than one of these types; however some older implementations of Scheme predate these standards such that #f and '() refer to the same value, as is the case in traditional Lisp including Common Lisp. The numeric type is further divided into a numerical tower, with subtypes complex, real, rational and integer. (Note that these subtypes are not disjoint; in fact each type is a subset of the last). While it is not required that a Scheme implementation support the entire numerical tower, most implementations do. Scheme also keeps track of whether a given number is "exact" or "inexact".[1] In Scheme and some other Lisp dialects, a numerical tower is the set of data types that represent numbers in a given programming language. ...
In mathematics, a complex number is a number of the form where a and b are real numbers, and i is the imaginary unit, with the property i 2 = â1. ...
In mathematics, the real numbers may be described informally as numbers that can be given by an infinite decimal representation, such as 2. ...
In mathematics, a rational number is a number which can be expressed as a ratio of two integers. ...
The integers are commonly denoted by the above symbol. ...
The boolean type represents true and false by #t and #f respectively. For historical reasons, however, any value can be used where a boolean is expected - any value other than #f is considered to be true, including the empty list (in traditional Lisp and Common Lisp, the empty list is considered to be false).[1] In computer science, the Boolean datatype, sometimes called the logical datatype, is a primitive datatype having two values: one and zero (which are equivalent to true and false). ...
Lisp is a family of computer programming languages with a long history and a distinctive fully-parenthesized syntax. ...
Common Lisp, commonly abbreviated CL, is a dialect of the Lisp programming language, published in ANSI standard X3. ...
Symbols can be created in at least the following ways: 'hello (string->symbol "hello") Equality Scheme has three different types of equality: "eq?" returns #t if its parameters represent the same data object in memory; "eqv?" is generally the same as eq? but treats some objects (eg. characters and numbers) specially so that numbers that are = are eqv? even if they are not eq?; equal? compares data structures such as lists, vectors and strings to determine if they have congruent structure and eqv? contents.[1] Type dependent equivalence operations also exist in Scheme: string=?; compares two strings; char=? compares characters; = compares numbers.[1]
Control structures Conditional evaluation (if test then-expr else-expr) The test expression is evaluated, and if the evaluation result is true (anything other than #f) then the then-expr is evaluated, otherwise else-expr is evaluated. A form that is more convenient when conditionals are nested is cond: (cond (test1 expr1 ...) (test2 expr2 ...) ... (else exprn)) The first expression for which the test evaluates to true will be evaluated. If all tests result in #f, the else clause is evaluated. A variant of the cond clause is (cond ... (test => expr) ...) In this case, expr should evaluate to a function that takes one argument. If test evaluates to true, the function is called with the return value of test.
Input/output Scheme has the concept of ports to read from or to write to.[1] R5RS defines two default ports, accessible with the functions current-input-port and current-output-port, which correspond to the Unix notions of stdin and stdout. Most implementations also provide current-error-port.
Implementation Current implementations include: PLT Scheme, MIT/GNU Scheme, Scheme 48, Chicken, Gambit, Guile, Bigloo, Chez Scheme, STk, STklos, Larceny, SCM, Kawa, Pvts, JScheme. PLT Scheme is an umbrella name for a family of implementations of the Scheme programming language. ...
MIT/GNU Scheme is a free software Scheme implementation. ...
Scheme 48 is a free software Scheme implementation using a bytecode interpreter. ...
Chicken is a compiler and interpreter for the Scheme programming language that compiles Scheme code to standard C. It is mostly R5RS compliant and offers many extensions to the standard. ...
Gambit, also called Gambit-C, is a free software Scheme implementation, consisting of a Scheme interpreter, and a compiler which compiles Scheme to C. Its documentation [1] claims conformance to the R4RS, R5RS, and IEEE standards, as well as several SRFI. Gambit home page Categories: | | | | ...
The GNU Guile logo GNU Guile (first released in 1993[1]) is an interpreter/virtual machine for the Scheme programming language and modularized extensions thereof (such as POSIX system call extensions or APL array functionality, packaged as a object[2] library (libguile) so that it can be embedded in other...
Bigloo is an implementation of the Scheme programming language developed at the French IT research institute INRIA. Bigloo home page Categories: | | | | ...
Chez Scheme is a commercial Scheme implementation by R. Kent Dybvig (author of The Scheme Programming Language), first released in 1985, which uses incremental native-code compilation to produce native binaries for the PowerPC, SPARC and x86 processor architectures. ...
STK stands for: Synthesis_Toolkit Storage Technology Corporation (StorageTek), a data storage company acquired in 2005 by Sun Microsystems SIM Tool Kit Satellite Tool Kit, an astrodynamics computer program from AGI. STK is stands for Shoot The Kids At School, the name of an internet message board founded by Matt M...
STklos is the Scheme which succeeded STk. ...
The Larceny Project is a set of computer programming languages, specifically Scheme implementations, using the Twobit optimizing Scheme compiler. ...
SCM is a free software Scheme implementation in C written by Aubrey Jaffer, the same author as the HOBBIT R4RS Scheme-to-C compiler, the SLIB Scheme library and the JACAL, interactive symbolic mathematics program. ...
The Kawa language framework is a computer software written in Java that implements the programming language Scheme. ...
The subject of this article may not satisfy the notability guideline. ...
JScheme is a zlib-licenced Scheme implementation, created by Ken Anderson, Tim Hickey and Peter Norvig, which is almost compliant with R4RS and has an interface to Java. ...
Some implementations support additional features. For example, Kawa and JScheme provide allow integration with Java. Another example is PVTS which offers a set of visual tools for supporting the learning of Scheme.
Usage Scheme is widely used by a number[6] of schools; in particular, a number of introductory Computer Science courses use Scheme in conjunction with the textbook Structure and Interpretation of Computer Programs[7]. There are relatively few examples of Scheme in apparent usage[8] for non-pedagogical purposes. However, the Document Style Semantics and Specification Language, which provides a method of specifying SGML stylesheets, uses a Scheme subset.[9] In addition, the well-known open source raster graphics editor, the GIMP uses Scheme as a scripting language.[10] Computer science, or computing science, is the study of the theoretical foundations of information and computation and their implementation and application in computer systems. ...
Front cover Structure and Interpretation of Computer Programs (SICP) is a textbook published in 1985 about general computer programming concepts from MIT press written by Massachusetts Institute of Technology professors Harold Abelson and Gerald Jay Sussman, with Julie Sussman. ...
Document Style Semantics and Specification Language (DSSSL) is a language for specifying stylesheets for SGML documents, based on a subset of the Scheme programming language. ...
The Standard Generalized Markup Language (SGML) is a metalanguage in which one can define markup languages for documents. ...
CSS Zen garden with the Paravion style sheet CSS Zen garden with the Uncultivated style sheet Cascading Style Sheets (CSS) is a computer language used to describe the presentation of a structured document written in HTML, XHTML or XML. The CSS specification is maintained by the World Wide Web Consortium...
Open source refers to projects that are open to the public and which draw on other projects that are freely available to the general public. ...
A screenshot from the KDE raster graphics editor KolourPaint A screenshot from the GIMP raster graphics editor A raster graphics editor is a computer program that allows users to paint and edit pictures interactively on the computer screen and save them in one of many popular bitmap or raster formats...
The GNU Image Manipulation Program, or GIMP, is a raster graphics editor application with some support for vector graphics. ...
Scripting languages (commonly called scripting programming languages or script languages) are computer programming languages that are typically interpreted and can be typed directly from a keyboard. ...
See also Front cover Structure and Interpretation of Computer Programs (SICP) is a textbook published in 1985 about general computer programming concepts from MIT press written by Massachusetts Institute of Technology professors Harold Abelson and Gerald Jay Sussman, with Julie Sussman. ...
Computer science, or computing science, is the study of the theoretical foundations of information and computation and their implementation and application in computer systems. ...
Front cover How to Design Programs (HTDP) is a textbook from MIT Press on the systematic design of computer programs. ...
This page is about the computer science continuation. ...
Kernel is a Scheme-like programming language by John N. Shutt in which all objects are first-class. ...
References A digital object identifier (or DOI) is a standard for persistently identifying a piece of intellectual property on a digital network and associating it with related data, the metadata, in a structured extensible way. ...
// Gerald Jay Sussman is the Panasonic Professor of Electrical Engineering at the Massachusetts Institute of Technology (MIT). ...
Guy Lewis Steele, Jr. ...
A digital object identifier (or DOI) is a standard for persistently identifying a piece of intellectual property on a digital network and associating it with related data, the metadata, in a structured extensible way. ...
ISSN, or International Standard Serial Number, is the unique eight-digit number applied to a periodical publication including electronic serials. ...
Year 2006 (MMVI) was a common year starting on Sunday (link displays full 2006 calendar) of the Gregorian calendar. ...
is the 170th day of the year (171st in leap years) in the Gregorian calendar. ...
Guy Lewis Steele, Jr. ...
Richard P. Gabriel (b. ...
External links Wikibooks has more about this subject: Scheme |