Scheme (programming language): Difference between revisions

Content deleted Content added
Modifed Guile entry.
Ap (talk | contribs)
added advantages and disadvantages section
Line 7:
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.
 
=== StandardsAdvantages of Scheme ===
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 adopted to any problem ___domain. Extending Scheme to naturally support [[object-oriented programming]] can only be done with 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 languages 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 ==
There are two standards that define the Scheme language: the official IEEE standard, and a de facto standard called the ''Revised<sup>n<sup>th</sup></sup> Report on the Algorithmic Language Scheme'', nearly always abbreviated R<sup>n</sup>RS, where <I>n</I> is the number of the revision. The latest R<sup>n</sup>RS version is R<sup>5</sup>RS, available online at http://www.schemers.org/Documents/Standards/R5RS/ .
 
=== Examples ===
Scheme code can be found in at least the following Wikipedia articles:
* [[Arithmetic geometric mean]]
* [[Tail recursion]]
 
=== Implementations ===
* [http://www.scheme.com/ - Chez Scheme], a proprietary freeware Scheme interpreter and commercial Scheme compiler for [[Microsoft Windows]] and several [[UNIX]] systems
* [http://www.gnu.org/software/guile/ - [[Guile]] is the [[GNU | GNU project]]'s official extension language. The Scheme interpreter is packaged as a library to provides scripting to applications.
* [http://www.plt-scheme.org/ - The PLT Scheme suite], a suite of Scheme programs for Windows, Mac, and Unix platforms including an interpreter (MzScheme), a graphical toolkit (MrEd), a pedagogically-oriented graphical editor (DrScheme), and various other components including [[COM]] and [[ODBC]] libraries.
 
=== Additional Resources ===
* [http://www.schemers.org/ - A large collection of Scheme resources].
* [http://srfi.schemers.org/ Scheme Requests for Implementation (SRFI)]
* [http://www.htdp.org/ - Online book ''How to Design Programs''] which purports to teach programming using Scheme. The authors seem to have some very clear ideas on how they think teaching programming should be done.
* [http://www.scheme.com/tspl2ed.html - Online book ''The Scheme Programming Language'']] written by R. Kent Dybvig. A useful language reference.
* [http://library.readscheme.org/ - A bibliography of Scheme-related research] including links to online versions of many academic papers, including all of the original 'Lambda Papers.'