Scheme (programming language): Difference between revisions

Content deleted Content added
Added Bigloo to the list of Scheme implementations.
Random tweaking
Line 3:
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 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.'
 
Scheme's philosophy is unashamedly [[minimalism|minimalist]]. Its goal is not to pile feature upon feature, but to remove weaknesses and restrictions that make new features appear necessary. Therefore, Scheme provides as few primitive notions as possible, and let everything else be implemented on top of them. For instanceexample, the main mechanism for governing control flow is [[tail recursion]].
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.
 
ItScheme was the first variety of Lisp to featureuse [[lexical variable scoping]] rather(as thanopposed to [[dynamic variable scoping]]) exclusively. Like Lisp, Scheme supports [[computer memory garbage collection|garbage collection]] of unreferenced data. It uses lists as the primary data structure, andbut listalso operationshas suchgood assupport cdrfor andarrays. Owing to the minimalism of the specification, there is no standard syntax for creating structures with named fields, or for doing [[object oriented|object oriented progamming]], but many individual implementations have such carfeatures.
Scheme's philosophy is unashamedly [[minimalism|minimalist]]. Its goal is not to pile feature upon feature, but to remove weaknesses and restrictions that make new features appear necessary. Therefore, Scheme provides 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 11:
 
== Advantages of Scheme ==
Scheme has very little syntax compared to many other programming languages. It has no operator precedence rules because theythere are explicitessentially no operators -- as in the[[Lisp programming language|Lisp]], prefix notation is used for all function calls.
 
Thanks to its [[macro]] facilities, Scheme can be adapted to any problem ___domain. They Extendingcan Schemeeven be used to naturallyadd support for [[object-oriented programming]]. canScheme beprovides donea using[[hygenic onlymacros|hygenic macro]] system, which while not quite as powerful as [[Common Lisp programming language|Common Lisp]]'s macros, is much safer and often easier to work with.
 
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 dosupports [[variable assignment]] and 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. Functions can also be created anonymously.