70 lines
No EOL
7.4 KiB
HTML
70 lines
No EOL
7.4 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<title>CLiki: Scheme</title>
|
|
<link rel="alternate" type="application/atom+xml" title="ATOM feed of edits to current article"
|
|
href="https://www.cliki.net/site/feed/article.atom?title=Scheme">
|
|
<link rel="stylesheet" href="static/css/style.css">
|
|
<link rel="stylesheet" href="static/css/colorize.css">
|
|
</head>
|
|
|
|
<body>
|
|
<span class="hidden">CLiki - Scheme</span>
|
|
<div id="content"><div id="content-area"><div id="article-title">Scheme</div><div id="article"><a href="http://groups.csail.mit.edu/mac/projects/scheme/">Scheme</a> is a statically scoped and properly <a href="Tail Recursion.html" class="internal">tail-recursive</a> dialect of the Lisp <a href="programming language.html" class="internal">programming language</a> designed by Guy Lewis Steele Jr. and Gerald Jay Sussman.<p>Scheme and <a href="Common Lisp.html" class="internal">Common Lisp</a> are the two main <a href="Lisp.html" class="internal">Lisp</a> dialects in use today. They represent two opposite examples of how a language can evolve. Both Lisps look very much alike, especially if you are approaching them from the <a href="Java.html" class="internal">Java</a> or C++ worlds. They are strangely full of parenthesis, for example. But they also have important differences, mainly as a result of their design philosophy. The more visible is their size. The main objective of the CL committee was to incorporate in the new language most of the features of the preceding Lisp dialects (a one and only, a 'Common' Lisp). In contrast, Scheme designers removed everything considered superfluous from the core (and left a core, with no standard libraries).<p><ul>
|
|
<li>Scheme doesn't have a specification for structures with named fields or object oriented programming, while there are some language implementations and libraries (non standardized) that include these and more. A <a href="macro example.html" class="internal">macro</a> facility was incorporated later to the standard, but it is not identical to its <a href="Common Lisp.html" class="internal">Common Lisp</a> counterpart. Considered safer but more restrictive, Scheme macros are known as <a href="https://en.wikipedia.org/wiki/Hygienic_macro">Hygienic Macros</a>.
|
|
</li>
|
|
<li>
|
|
<a href="http://community.schemewiki.org/?scheme-faq-general">Scheme</a> is a dialect of Lisp that stresses conceptual elegance and simplicity. It was also one of the first and few programming languages to fully support <a href="continuations.html" class="internal">continuations</a>. It is much smaller than Common Lisp; the language specification is about 50 pages, compared to Common Lisp's 1300 page draft standard. Advocates of Scheme often find it amusing that the entire Scheme standard is shorter than the index to Guy Steele's <a href="CLtL2.html" class="internal">Common Lisp: the Language, 2nd Edition</a>. Unlike the Scheme standard, the Common Lisp standard has a large library of utility functions, a standard object-oriented programming facility (<a href="CLOS.html" class="internal">CLOS</a>), and a sophisticated condition handling system.
|
|
</li>
|
|
<li>Scheme was the first dialect of <a href="Lisp.html" class="internal">Lisp</a> to use lexical variable scoping (or "static scoping").
|
|
</li>
|
|
</ul>
|
|
Precisely because of these characteristics, Scheme has been used successfully in computer science courses. The <a href="SICP.html" class="internal">SICP</a> book of Abelson, Sussman and Sussman, and their courses at <a href="MIT.html" class="internal">MIT</a>, are the best example. There are few "real world use" examples of Scheme. Nevertheless, being small and clear, it can be very well used as an embedded language (as intended by the <a href="GNU.html" class="internal">GNU</a> Guile project). Certainly, good compilers can be found, including some in <a href="Java.html" class="internal">Java</a>, but Scheme shines as a very efficient interpreted language.<p>There has been some buzz recently about the benefits of using Continuation Passing Style (<a href="CPS.html" class="internal">CPS</a>) to facilitate user interaction in <a href="Web.html" class="internal">Web</a> applications. UnCommon Web (<a href="UCW.html" class="internal">UCW</a>) is an example of how this can be done in <a href="Common Lisp.html" class="internal">Common Lisp</a>. The acknowledged lisp writer and programmer <a href="Paul Graham.html" class="internal">Paul Graham</a> is known to have applied a similar approach (using lexical closures to simulate subroutine-like behavior), among other many advantages given by Lisp, to program important parts of his successful web startup Viaweb (now Yahoo! Store). Considering that Scheme shares most of the benefits of Lisp and supports continuations natively, it clearly is a strong candidate for a continuation-based <a href="Web Framework.html" class="internal">Web Framework</a>.<p><ul>
|
|
<li>More information can by found at <a href="https://schemers.org/">Schemers</a> site.
|
|
</li>
|
|
<li>For a list of differences between dialects see <a href="http://wiki.c2.com/?LispSchemeDifferences">Lisp Scheme Differences</a>.
|
|
</li>
|
|
<li>For a more "opinionated" point of view, see <a href="http://p-cos.net/lisp/guide.html">Pascal Costanza's Highly Opinionated Guide to Lisp</a>.
|
|
</li>
|
|
<li>
|
|
<a href="http://okmij.org/ftp/continuations/against-callcc.html">An argument against call/cc</a>
|
|
</li>
|
|
</ul></div></div>
|
|
<div id="footer" class="buttonbar"><ul><li><a href="Scheme.html">Current version</a></li>
|
|
<li><a href="https://www.cliki.net/site/history?article=Scheme">History</a></li>
|
|
<li><a href="https://www.cliki.net/site/backlinks?article=Scheme">Backlinks</a></li><li><a href="https://www.cliki.net/site/edit-article?title=Scheme&from-revision=3803578985">Edit</a></li><li><a href="https://www.cliki.net/site/edit-article?create=t">Create</a></li></ul></div>
|
|
</div>
|
|
<div id="header-buttons" class="buttonbar">
|
|
<ul>
|
|
<li><a href="https://www.cliki.net/">Home</a></li>
|
|
<li><a href="https://www.cliki.net/site/recent-changes">Recent Changes</a></li>
|
|
<li><a href="CLiki.html">About</a></li>
|
|
<li><a href="Text Formatting.html">Text Formatting</a></li>
|
|
<li><a href="https://www.cliki.net/site/tools">Tools</a></li>
|
|
</ul>
|
|
<div id="search">
|
|
<form action="https://www.cliki.net/site/search">
|
|
<label for="search_query" class="hidden">Search CLiki</label>
|
|
<input type="text" name="query" id="search_query" value="" />
|
|
<input type="submit" value="search" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<div id="pageheader">
|
|
<div id="header">
|
|
<span id="logo">CLiki</span>
|
|
<span id="slogan">the common lisp wiki</span>
|
|
<div id="login"><form method="post" action="https://www.cliki.net/site/login">
|
|
<label for="login_name" class="hidden">Account name</label>
|
|
<input type="text" name="name" id="login_name" class="login_input" />
|
|
<label for= "login_password" class="hidden">Password</label>
|
|
<input type="password" name="password" id="login_password" class="login_input" />
|
|
<input type="submit" name="login" value="login" id="login_submit" /><br />
|
|
<div id="register"><a href="https://www.cliki.net/site/register">register</a></div>
|
|
<input type="submit" name="reset-pw" value="reset password" id="reset_pw" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body></html> |