Scheme (programming language): Difference between revisions
imported>Greg Woodhouse (add "Hello, World" example) |
imported>Greg Woodhouse (add section on properties of Scheme) |
||
Line 1: | Line 1: | ||
'''Scheme''' is [[functional language|functional]] programming language developed by [[Guy Lewis Steele, Jr.|Guy L. Steele]]. Both the language and the RABBIT compiler are described in his [http://library.readscheme.org/servlets/cite.ss?pattern=Ste-78b master's thesis]. Scheme is considered a dialect of [[LISP]], but it differs from other languages of the LISP family (notably [[Common LISP]]) in that it is strict, lexically scoped and designed to be small and efficient. Indeed, Scheme is frequently considered an instructional language, or at least a language designed for research rather than application development. In fact, the name Scheme is actually derived from a program named "Schemer" developed at the [[Massachusetts Institute of Technology|M.I.T.]] AI Lab. Another reason for this perception is that Scheme was designed to more faithfully implement [[Alonzo Church|Church's]] [[lambda calculus]] than did comparable languages at the time. | '''Scheme''' is [[functional language|functional]] programming language developed by [[Guy Lewis Steele, Jr.|Guy L. Steele]]. Both the language and the RABBIT compiler are described in his [http://library.readscheme.org/servlets/cite.ss?pattern=Ste-78b master's thesis]. Scheme is considered a dialect of [[LISP]], but it differs from other languages of the LISP family (notably [[Common LISP]]) in that it is strict, lexically scoped and designed to be small and efficient. Indeed, Scheme is frequently considered an instructional language, or at least a language designed for research rather than application development. In fact, the name Scheme is actually derived from a program named "Schemer" developed at the [[Massachusetts Institute of Technology|M.I.T.]] AI Lab. Another reason for this perception is that Scheme was designed to more faithfully implement [[Alonzo Church|Church's]] [[lambda calculus]] than did comparable languages at the time. | ||
==Properties of Scheme== | |||
===Scheme is a functional language=== | |||
In fact, Scheme is an ''almost'' functional language, it does still allow functions to have side-effects, but in practice it is considerfed to be a [[functional language]]. What does this mean? In the simplest sense, it means that programs consist of functions, objects taking zero or more inputs and producing an output according to a well-defined scheme. By contrast, languages like [[C (language)|C]], [[Pascal (language)|Pascal]] and [[FORTRAN]] are said to be [[procedural language]]s. But this description can be a bit misleading. Programs written in procedural languages "compute" by carrying out instructions specified by the programmer. By contrast, a functional program does not consist of instructions to '''do''' things, but consists of expressions that may be reduced to simpler expressions via application of a few basic rules (te terminology is due to Church) | |||
* '''Alpha conversion''' - consistent renaming of variables | |||
* '''Beta reduction''' - application of functions | |||
* '''Eta conversion''' - converting expressions to functions (lambda abstraction) | |||
* '''Delta rules''' - rules governing application of built-in functions such as addition (delta rules are not part of the lambda calculus) | |||
In practice, though, Scheme does not make use of reductions directly, but instead proceeds by evaluation. This is made possible by other features of Scheme (notably strictness). The equivalence of the approaches is an important result. | |||
===Strictness=== | |||
Scheme is said to be '''strict''' because when expressions are evaluated, any parameters (inputs) must be evaluated before the expression itself is evaluated. In this respect Scheme is similar to languages like [[Standard ML]] and differs from "lazy" languages like [[Haskell]]. | |||
==Sample Programs== | ==Sample Programs== |
Revision as of 11:58, 1 August 2007
Scheme is functional programming language developed by Guy L. Steele. Both the language and the RABBIT compiler are described in his master's thesis. Scheme is considered a dialect of LISP, but it differs from other languages of the LISP family (notably Common LISP) in that it is strict, lexically scoped and designed to be small and efficient. Indeed, Scheme is frequently considered an instructional language, or at least a language designed for research rather than application development. In fact, the name Scheme is actually derived from a program named "Schemer" developed at the M.I.T. AI Lab. Another reason for this perception is that Scheme was designed to more faithfully implement Church's lambda calculus than did comparable languages at the time.
Properties of Scheme
Scheme is a functional language
In fact, Scheme is an almost functional language, it does still allow functions to have side-effects, but in practice it is considerfed to be a functional language. What does this mean? In the simplest sense, it means that programs consist of functions, objects taking zero or more inputs and producing an output according to a well-defined scheme. By contrast, languages like C, Pascal and FORTRAN are said to be procedural languages. But this description can be a bit misleading. Programs written in procedural languages "compute" by carrying out instructions specified by the programmer. By contrast, a functional program does not consist of instructions to do things, but consists of expressions that may be reduced to simpler expressions via application of a few basic rules (te terminology is due to Church)
- Alpha conversion - consistent renaming of variables
- Beta reduction - application of functions
- Eta conversion - converting expressions to functions (lambda abstraction)
- Delta rules - rules governing application of built-in functions such as addition (delta rules are not part of the lambda calculus)
In practice, though, Scheme does not make use of reductions directly, but instead proceeds by evaluation. This is made possible by other features of Scheme (notably strictness). The equivalence of the approaches is an important result.
Strictness
Scheme is said to be strict because when expressions are evaluated, any parameters (inputs) must be evaluated before the expression itself is evaluated. In this respect Scheme is similar to languages like Standard ML and differs from "lazy" languages like Haskell.
Sample Programs
Hello World
> (define (hello-world) (write "Hello, World!") (newline)) > (hello-world) "Hello, World!"