Scheme (programming language): Difference between revisions

Content deleted Content added
No edit summary
m links
Line 1:
The '''Scheme programming language''' is a [[functional programming language|functional]] [[programming language]] which is a dialect of [[Lisp]]. It was developed by [[Guy L. Steele]] and [[Gerald J.Jay Sussman]] in the [[1970s]] and introduced to the academic world via a series of papers now referred to as Sussman and Steele's 'Lambda Papers.'
 
It was the first variety of Lisp to feature [[lexical variable scoping]] rather than [[dynamic variable scoping]]. Like Lisp, Scheme supports [[computer memory garbage collection|garbage collection]] of unreferenced data. It uses lists as primary data structure, and list operations such as cdr and car.
 
Scheme's philosophy is unashamedly [[Minimalism|minimalist]]: provide as few primitive notions as possible, and let everything else be implemented on top of them. For instance, the main mechanism for governing control flow is [[tail recursion]].
 
Why the curious name? Well, it was originally called "Schemer", in the tradition of the languages [[Planner programming language|Planner]] and [[Conniver programming language|Conniver]], but its authors used the [[ITS operating system]] which didn't allow filenames longer than 6 characters.
Line 10:
Scheme has very little syntax compared to many other programming languages. It has no operator precedence rules because they are explicit in the notation.
 
Thanks to its [[macro]] facilities, Scheme can be adapted to any problem ___domain. Extending Scheme to naturally support [[object-oriented programming]] can be done using only macros.
 
Scheme encourages [[functional programming]]. Pure functional programs need no global variables and don't have side-effects, and are therefore automatically [[thread-safe]], automatically verifyable and have more of these nice properties. However, Scheme can also do [[variable assignment]] for those who want it.
 
In Scheme, functions are first class citizens. This means they can be passed as arguments to another function or stored in a variable and manipulated. This allows higher order functions that can further abstract program logic.
 
== Disadvantages of Scheme ==
Unlike [[scripting languageslanguage]]s such as [[Perl programming language|Perl]] or [[Python programming language|Python]], Scheme is not standardized beyond its core. Functions that exist in one Scheme implementation do not need to exist in another or may have a completely different name and/or interface. The ''Scheme Requests for Implementation'' (SRFI) process tries to remedy this.
 
== Standards ==