CINXE.COM
Scheme (programming language) - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Scheme (programming language) - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"f92fed89-1e28-4162-a10c-b5d3f698effd","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Scheme_(programming_language)","wgTitle":"Scheme (programming language)","wgCurRevisionId":1251941794,"wgRevisionId":1251941794,"wgArticleId":28119,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["CS1 maint: multiple names: authors list","CS1: long volume value","Webarchive template wayback links","Articles with short description","Short description is different from Wikidata","All articles with unsourced statements","Articles with unsourced statements from May 2019","Commons category link is on Wikidata","Articles with example Scheme (programming language) code","Scheme (programming language)","Academic programming languages", "Dynamically typed programming languages","Extensible syntax programming languages","Lisp programming language family","Multi-paradigm programming languages","Programming languages created in 1975"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Scheme_(programming_language)","wgRelevantArticleId":28119,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":70000,"wgRelatedArticlesCompat":[], "wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q187560","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript": "ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","site","mediawiki.page.ready","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Lambda_lc.svg/1200px-Lambda_lc.svg.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="1200"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Lambda_lc.svg/800px-Lambda_lc.svg.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="800"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Lambda_lc.svg/640px-Lambda_lc.svg.png"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="640"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Scheme (programming language) - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Scheme_(programming_language)"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Scheme_(programming_language)&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Scheme_(programming_language)"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Scheme_programming_language rootpage-Scheme_programming_language skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Scheme+%28programming+language%29" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Scheme+%28programming+language%29" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Scheme+%28programming+language%29" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Scheme+%28programming+language%29" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-History" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#History"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>History</span> </div> </a> <button aria-controls="toc-History-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle History subsection</span> </button> <ul id="toc-History-sublist" class="vector-toc-list"> <li id="toc-Origins" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Origins"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>Origins</span> </div> </a> <ul id="toc-Origins-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-R6RS" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#R6RS"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2</span> <span>R6RS</span> </div> </a> <ul id="toc-R6RS-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-R7RS" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#R7RS"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.3</span> <span>R7RS</span> </div> </a> <ul id="toc-R7RS-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Distinguishing_features" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Distinguishing_features"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Distinguishing features</span> </div> </a> <button aria-controls="toc-Distinguishing_features-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Distinguishing features subsection</span> </button> <ul id="toc-Distinguishing_features-sublist" class="vector-toc-list"> <li id="toc-Minimalism" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Minimalism"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>Minimalism</span> </div> </a> <ul id="toc-Minimalism-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Lexical_scope" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Lexical_scope"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span>Lexical scope</span> </div> </a> <ul id="toc-Lexical_scope-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Lambda_calculus" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Lambda_calculus"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3</span> <span>Lambda calculus</span> </div> </a> <ul id="toc-Lambda_calculus-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Block_structure" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Block_structure"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4</span> <span>Block structure</span> </div> </a> <ul id="toc-Block_structure-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Proper_tail_recursion" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Proper_tail_recursion"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.5</span> <span>Proper tail recursion</span> </div> </a> <ul id="toc-Proper_tail_recursion-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-First-class_continuations" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#First-class_continuations"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.6</span> <span>First-class continuations</span> </div> </a> <ul id="toc-First-class_continuations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Shared_namespace_for_procedures_and_variables" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Shared_namespace_for_procedures_and_variables"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.7</span> <span>Shared namespace for procedures and variables</span> </div> </a> <ul id="toc-Shared_namespace_for_procedures_and_variables-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Implementation_standards" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Implementation_standards"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Implementation standards</span> </div> </a> <button aria-controls="toc-Implementation_standards-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Implementation standards subsection</span> </button> <ul id="toc-Implementation_standards-sublist" class="vector-toc-list"> <li id="toc-Numerical_tower" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Numerical_tower"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Numerical tower</span> </div> </a> <ul id="toc-Numerical_tower-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Delayed_evaluation" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Delayed_evaluation"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Delayed evaluation</span> </div> </a> <ul id="toc-Delayed_evaluation-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Order_of_evaluation_of_procedure_arguments" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Order_of_evaluation_of_procedure_arguments"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>Order of evaluation of procedure arguments</span> </div> </a> <ul id="toc-Order_of_evaluation_of_procedure_arguments-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Hygienic_macros" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Hygienic_macros"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.4</span> <span>Hygienic macros</span> </div> </a> <ul id="toc-Hygienic_macros-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Environments_and_eval" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Environments_and_eval"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.5</span> <span>Environments and eval</span> </div> </a> <ul id="toc-Environments_and_eval-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Treatment_of_non-Boolean_values_in_Boolean_expressions" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Treatment_of_non-Boolean_values_in_Boolean_expressions"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.6</span> <span>Treatment of non-Boolean values in Boolean expressions</span> </div> </a> <ul id="toc-Treatment_of_non-Boolean_values_in_Boolean_expressions-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Disjointness_of_primitive_datatypes" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Disjointness_of_primitive_datatypes"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.7</span> <span>Disjointness of primitive datatypes</span> </div> </a> <ul id="toc-Disjointness_of_primitive_datatypes-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Equivalence_predicates" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Equivalence_predicates"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.8</span> <span>Equivalence predicates</span> </div> </a> <ul id="toc-Equivalence_predicates-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Comments" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Comments"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.9</span> <span>Comments</span> </div> </a> <ul id="toc-Comments-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Input/output" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Input/output"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.10</span> <span>Input/output</span> </div> </a> <ul id="toc-Input/output-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Redefinition_of_standard_procedures" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Redefinition_of_standard_procedures"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.11</span> <span>Redefinition of standard procedures</span> </div> </a> <ul id="toc-Redefinition_of_standard_procedures-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Nomenclature_and_naming_conventions" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Nomenclature_and_naming_conventions"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.12</span> <span>Nomenclature and naming conventions</span> </div> </a> <ul id="toc-Nomenclature_and_naming_conventions-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Review_of_standard_forms_and_procedures" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Review_of_standard_forms_and_procedures"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Review of standard forms and procedures</span> </div> </a> <button aria-controls="toc-Review_of_standard_forms_and_procedures-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Review of standard forms and procedures subsection</span> </button> <ul id="toc-Review_of_standard_forms_and_procedures-sublist" class="vector-toc-list"> <li id="toc-Standard_forms" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Standard_forms"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.1</span> <span>Standard forms</span> </div> </a> <ul id="toc-Standard_forms-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Standard_procedures" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Standard_procedures"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.2</span> <span>Standard procedures</span> </div> </a> <ul id="toc-Standard_procedures-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Scheme_Requests_for_Implementation" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Scheme_Requests_for_Implementation"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Scheme Requests for Implementation</span> </div> </a> <ul id="toc-Scheme_Requests_for_Implementation-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Implementations" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Implementations"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Implementations</span> </div> </a> <ul id="toc-Implementations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Usage" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Usage"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Usage</span> </div> </a> <ul id="toc-Usage-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>References</span> </div> </a> <ul id="toc-References-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Further_reading" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Further_reading"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>Further reading</span> </div> </a> <ul id="toc-Further_reading-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Scheme (programming language)</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 48 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-48" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">48 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%B3%D9%83%D9%8A%D9%85_(%D9%84%D8%BA%D8%A9_%D8%A8%D8%B1%D9%85%D8%AC%D8%A9)" title="سكيم (لغة برمجة) – Arabic" lang="ar" hreflang="ar" data-title="سكيم (لغة برمجة)" data-language-autonym="العربية" data-language-local-name="Arabic" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Scheme" title="Scheme – Azerbaijani" lang="az" hreflang="az" data-title="Scheme" data-language-autonym="Azərbaycanca" data-language-local-name="Azerbaijani" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%B8%E0%A7%8D%E0%A6%95%E0%A6%BF%E0%A6%AE_(%E0%A6%AA%E0%A7%8D%E0%A6%B0%E0%A7%8B%E0%A6%97%E0%A7%8D%E0%A6%B0%E0%A6%BE%E0%A6%AE%E0%A6%BF%E0%A6%82_%E0%A6%AD%E0%A6%BE%E0%A6%B7%E0%A6%BE)" title="স্কিম (প্রোগ্রামিং ভাষা) – Bangla" lang="bn" hreflang="bn" data-title="স্কিম (প্রোগ্রামিং ভাষা)" data-language-autonym="বাংলা" data-language-local-name="Bangla" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/Scheme" title="Scheme – Belarusian" lang="be" hreflang="be" data-title="Scheme" data-language-autonym="Беларуская" data-language-local-name="Belarusian" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/Scheme_(%D0%B5%D0%B7%D0%B8%D0%BA_%D0%B7%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D0%BD%D0%B5)" title="Scheme (език за програмиране) – Bulgarian" lang="bg" hreflang="bg" data-title="Scheme (език за програмиране)" data-language-autonym="Български" data-language-local-name="Bulgarian" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Scheme" title="Scheme – Catalan" lang="ca" hreflang="ca" data-title="Scheme" data-language-autonym="Català" data-language-local-name="Catalan" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Scheme" title="Scheme – Czech" lang="cs" hreflang="cs" data-title="Scheme" data-language-autonym="Čeština" data-language-local-name="Czech" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Scheme" title="Scheme – Danish" lang="da" hreflang="da" data-title="Scheme" data-language-autonym="Dansk" data-language-local-name="Danish" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Scheme" title="Scheme – German" lang="de" hreflang="de" data-title="Scheme" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/Scheme" title="Scheme – Estonian" lang="et" hreflang="et" data-title="Scheme" data-language-autonym="Eesti" data-language-local-name="Estonian" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/Scheme" title="Scheme – Greek" lang="el" hreflang="el" data-title="Scheme" data-language-autonym="Ελληνικά" data-language-local-name="Greek" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Scheme" title="Scheme – Spanish" lang="es" hreflang="es" data-title="Scheme" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikipedia.org/wiki/Scheme" title="Scheme – Esperanto" lang="eo" hreflang="eo" data-title="Scheme" data-language-autonym="Esperanto" data-language-local-name="Esperanto" class="interlanguage-link-target"><span>Esperanto</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%A7%D8%B3%DA%A9%DB%8C%D9%85_(%D8%B2%D8%A8%D8%A7%D9%86_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C)" title="اسکیم (زبان برنامهنویسی) – Persian" lang="fa" hreflang="fa" data-title="اسکیم (زبان برنامهنویسی)" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Scheme" title="Scheme – French" lang="fr" hreflang="fr" data-title="Scheme" data-language-autonym="Français" data-language-local-name="French" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-fy mw-list-item"><a href="https://fy.wikipedia.org/wiki/Scheme" title="Scheme – Western Frisian" lang="fy" hreflang="fy" data-title="Scheme" data-language-autonym="Frysk" data-language-local-name="Western Frisian" class="interlanguage-link-target"><span>Frysk</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%82%B4_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)" title="스킴 (프로그래밍 언어) – Korean" lang="ko" hreflang="ko" data-title="스킴 (프로그래밍 언어)" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/Scheme" title="Scheme – Armenian" lang="hy" hreflang="hy" data-title="Scheme" data-language-autonym="Հայերեն" data-language-local-name="Armenian" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-hr mw-list-item"><a href="https://hr.wikipedia.org/wiki/Scheme" title="Scheme – Croatian" lang="hr" hreflang="hr" data-title="Scheme" data-language-autonym="Hrvatski" data-language-local-name="Croatian" class="interlanguage-link-target"><span>Hrvatski</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Scheme" title="Scheme – Italian" lang="it" hreflang="it" data-title="Scheme" data-language-autonym="Italiano" data-language-local-name="Italian" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/Scheme" title="Scheme – Hebrew" lang="he" hreflang="he" data-title="Scheme" data-language-autonym="עברית" data-language-local-name="Hebrew" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/Scheme" title="Scheme – Lithuanian" lang="lt" hreflang="lt" data-title="Scheme" data-language-autonym="Lietuvių" data-language-local-name="Lithuanian" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Scheme" title="Scheme – Hungarian" lang="hu" hreflang="hu" data-title="Scheme" data-language-autonym="Magyar" data-language-local-name="Hungarian" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%B8%E0%B5%8D%E0%B4%95%E0%B5%80%E0%B4%82_(%E0%B4%AA%E0%B5%8D%E0%B4%B0%E0%B5%8B%E0%B4%97%E0%B5%8D%E0%B4%B0%E0%B4%BE%E0%B4%AE%E0%B4%BF%E0%B4%99%E0%B5%8D_%E0%B4%AD%E0%B4%BE%E0%B4%B7)" title="സ്കീം (പ്രോഗ്രാമിങ് ഭാഷ) – Malayalam" lang="ml" hreflang="ml" data-title="സ്കീം (പ്രോഗ്രാമിങ് ഭാഷ)" data-language-autonym="മലയാളം" data-language-local-name="Malayalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/Scheme" title="Scheme – Dutch" lang="nl" hreflang="nl" data-title="Scheme" data-language-autonym="Nederlands" data-language-local-name="Dutch" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/Scheme" title="Scheme – Japanese" lang="ja" hreflang="ja" data-title="Scheme" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Scheme" title="Scheme – Norwegian Bokmål" lang="nb" hreflang="nb" data-title="Scheme" data-language-autonym="Norsk bokmål" data-language-local-name="Norwegian Bokmål" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-nn mw-list-item"><a href="https://nn.wikipedia.org/wiki/Scheme" title="Scheme – Norwegian Nynorsk" lang="nn" hreflang="nn" data-title="Scheme" data-language-autonym="Norsk nynorsk" data-language-local-name="Norwegian Nynorsk" class="interlanguage-link-target"><span>Norsk nynorsk</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Scheme" title="Scheme – Polish" lang="pl" hreflang="pl" data-title="Scheme" data-language-autonym="Polski" data-language-local-name="Polish" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Scheme" title="Scheme – Portuguese" lang="pt" hreflang="pt" data-title="Scheme" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/Scheme_(limbaj_de_programare)" title="Scheme (limbaj de programare) – Romanian" lang="ro" hreflang="ro" data-title="Scheme (limbaj de programare)" data-language-autonym="Română" data-language-local-name="Romanian" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-rue mw-list-item"><a href="https://rue.wikipedia.org/wiki/Scheme" title="Scheme – Rusyn" lang="rue" hreflang="rue" data-title="Scheme" data-language-autonym="Русиньскый" data-language-local-name="Rusyn" class="interlanguage-link-target"><span>Русиньскый</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/Scheme" title="Scheme – Russian" lang="ru" hreflang="ru" data-title="Scheme" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Scheme_(programming_language)" title="Scheme (programming language) – Simple English" lang="en-simple" hreflang="en-simple" data-title="Scheme (programming language)" data-language-autonym="Simple English" data-language-local-name="Simple English" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sk mw-list-item"><a href="https://sk.wikipedia.org/wiki/Scheme_(programovac%C3%AD_jazyk)" title="Scheme (programovací jazyk) – Slovak" lang="sk" hreflang="sk" data-title="Scheme (programovací jazyk)" data-language-autonym="Slovenčina" data-language-local-name="Slovak" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Scheme_(programski_jezik)" title="Scheme (programski jezik) – Slovenian" lang="sl" hreflang="sl" data-title="Scheme (programski jezik)" data-language-autonym="Slovenščina" data-language-local-name="Slovenian" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/Scheme_(programski_jezik)" title="Scheme (programski jezik) – Serbian" lang="sr" hreflang="sr" data-title="Scheme (programski jezik)" data-language-autonym="Српски / srpski" data-language-local-name="Serbian" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sh mw-list-item"><a href="https://sh.wikipedia.org/wiki/Scheme_(programski_jezik)" title="Scheme (programski jezik) – Serbo-Croatian" lang="sh" hreflang="sh" data-title="Scheme (programski jezik)" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="Serbo-Croatian" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/Scheme" title="Scheme – Finnish" lang="fi" hreflang="fi" data-title="Scheme" data-language-autonym="Suomi" data-language-local-name="Finnish" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Scheme" title="Scheme – Swedish" lang="sv" hreflang="sv" data-title="Scheme" data-language-autonym="Svenska" data-language-local-name="Swedish" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/%E0%AE%87%E0%AE%9A%E0%AF%81%E0%AE%95%E0%AF%80%E0%AE%AE%E0%AF%8D" title="இசுகீம் – Tamil" lang="ta" hreflang="ta" data-title="இசுகீம்" data-language-autonym="தமிழ்" data-language-local-name="Tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/Scheme" title="Scheme – Tajik" lang="tg" hreflang="tg" data-title="Scheme" data-language-autonym="Тоҷикӣ" data-language-local-name="Tajik" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Scheme" title="Scheme – Turkish" lang="tr" hreflang="tr" data-title="Scheme" data-language-autonym="Türkçe" data-language-local-name="Turkish" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/Scheme" title="Scheme – Ukrainian" lang="uk" hreflang="uk" data-title="Scheme" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Scheme" title="Scheme – Vietnamese" lang="vi" hreflang="vi" data-title="Scheme" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamese" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/Scheme_(%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80)" title="Scheme (程式語言) – Cantonese" lang="yue" hreflang="yue" data-title="Scheme (程式語言)" data-language-autonym="粵語" data-language-local-name="Cantonese" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-bat-smg mw-list-item"><a href="https://bat-smg.wikipedia.org/wiki/Scheme" title="Scheme – Samogitian" lang="sgs" hreflang="sgs" data-title="Scheme" data-language-autonym="Žemaitėška" data-language-local-name="Samogitian" class="interlanguage-link-target"><span>Žemaitėška</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Scheme" title="Scheme – Chinese" lang="zh" hreflang="zh" data-title="Scheme" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q187560#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Scheme_(programming_language)" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Scheme_(programming_language)" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Scheme_(programming_language)"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Scheme_(programming_language)&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Scheme_(programming_language)&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Scheme_(programming_language)"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Scheme_(programming_language)&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Scheme_(programming_language)&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Scheme_(programming_language)" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Scheme_(programming_language)" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Scheme_(programming_language)&oldid=1251941794" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Scheme_(programming_language)&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Scheme_%28programming_language%29&id=1251941794&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FScheme_%28programming_language%29"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FScheme_%28programming_language%29"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Scheme_%28programming_language%29&action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Scheme_(programming_language)&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:Scheme_(programming_language)" hreflang="en"><span>Wikimedia Commons</span></a></li><li class="wb-otherproject-link wb-otherproject-wikibooks mw-list-item"><a href="https://en.wikibooks.org/wiki/Scheme_Programming" hreflang="en"><span>Wikibooks</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q187560" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Dialect of Lisp</div> <style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1257001546">.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme) div:not(.notheme){background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table tr{display:table-row!important}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}</style><table class="infobox vevent"><caption class="infobox-title summary">Scheme</caption><tbody><tr><td colspan="2" class="infobox-image"><span typeof="mw:File"><a href="/wiki/File:Lambda_lc.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/3/39/Lambda_lc.svg/121px-Lambda_lc.svg.png" decoding="async" width="121" height="121" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/39/Lambda_lc.svg/182px-Lambda_lc.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/39/Lambda_lc.svg/242px-Lambda_lc.svg.png 2x" data-file-width="375" data-file-height="375" /></a></span></td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Programming_paradigm" title="Programming paradigm">Paradigms</a></th><td class="infobox-data"><a href="/wiki/Multi-paradigm_programming_language" class="mw-redirect" title="Multi-paradigm programming language">Multi-paradigm</a>: <a href="/wiki/Functional_programming" title="Functional programming">functional</a>, <a href="/wiki/Imperative_programming" title="Imperative programming">imperative</a>, <a href="/wiki/Metaprogramming" title="Metaprogramming">meta</a></td></tr><tr><th scope="row" class="infobox-label">Family</th><td class="infobox-data"><a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a></td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Software_design" title="Software design">Designed by</a></th><td class="infobox-data"><a href="/wiki/Guy_L._Steele" class="mw-redirect" title="Guy L. Steele">Guy L. Steele</a><br /><a href="/wiki/Gerald_Jay_Sussman" title="Gerald Jay Sussman">Gerald Jay Sussman</a></td></tr><tr><th scope="row" class="infobox-label">First appeared</th><td class="infobox-data">1975<span class="noprint">; 49 years ago</span><span style="display:none"> (<span class="bday dtstart published updated">1975</span>)</span></td></tr><tr><td colspan="2" class="infobox-full-data"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1257001546"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">R7RS / 2013<span class="noprint">; 11 years ago</span><span style="display:none"> (<span class="bday dtstart published updated">2013</span>)</span></div></td></tr><tr style="display:none"><td colspan="2"> </td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Type_system" title="Type system">Typing discipline</a></th><td class="infobox-data"><a href="/wiki/Dynamic_typing" class="mw-redirect" title="Dynamic typing">Dynamic</a>, <a href="/wiki/Latent_typing" title="Latent typing">latent</a>, <a href="/wiki/Strong_typing" class="mw-redirect" title="Strong typing">strong</a></td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Scope_(computer_science)" title="Scope (computer science)">Scope</a></th><td class="infobox-data"><a href="/wiki/Scope_(computer_science)#Lexical_scoping_and_dynamic_scoping" title="Scope (computer science)">Lexical</a></td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Filename_extension" title="Filename extension">Filename extensions</a></th><td class="infobox-data">.scm, .ss</td></tr><tr><th scope="row" class="infobox-label">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="https://www.scheme.org/">www<wbr />.scheme<wbr />.org</a></span></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #eee;">Major <a href="/wiki/Programming_language_implementation" title="Programming language implementation">implementations</a></th></tr><tr><td colspan="2" class="infobox-full-data">Many<br />(see <a href="/wiki/Category:Scheme_(programming_language)_implementations" title="Category:Scheme (programming language) implementations">Scheme implementations</a>)</td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #eee;">Influenced by</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="/wiki/ALGOL" title="ALGOL">ALGOL</a>, <a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>, <a href="/wiki/MDL_(programming_language)" title="MDL (programming language)">MDL</a></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #eee;">Influenced</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="/wiki/Clojure" title="Clojure">Clojure</a>, <a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a>, <a href="/wiki/Dylan_(programming_language)" title="Dylan (programming language)">Dylan</a>, <a href="/wiki/EuLisp" title="EuLisp">EuLisp</a>, <a href="/wiki/Haskell" title="Haskell">Haskell</a>, <a href="/wiki/Hop_(software)" title="Hop (software)">Hop</a>, <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a>, <a href="/wiki/Julia_(programming_language)" title="Julia (programming language)">Julia</a>, <a href="/wiki/Lua_(programming_language)" title="Lua (programming language)">Lua</a>, <a href="/wiki/MultiLisp" title="MultiLisp">MultiLisp</a>, <a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="/wiki/R_(programming_language)" title="R (programming language)">R</a>, <a href="/wiki/Racket_(programming_language)" title="Racket (programming language)">Racket</a>, <a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>, <a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a>,<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> <a href="/wiki/S_(programming_language)" title="S (programming language)">S</a>, <a href="/wiki/Scala_(programming_language)" title="Scala (programming language)">Scala</a>, <a href="/wiki/T_(programming_language)" title="T (programming language)">T</a></td></tr><tr><td colspan="2" class="infobox-below hlist" style="border-top: 1px solid #aaa; padding-top: 3px;"> <ul><li><span class="noviewer" typeof="mw:File"><a href="/wiki/File:Wikibooks-logo-en-noslogan.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/16px-Wikibooks-logo-en-noslogan.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/24px-Wikibooks-logo-en-noslogan.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/32px-Wikibooks-logo-en-noslogan.svg.png 2x" data-file-width="400" data-file-height="400" /></a></span> <a href="https://en.wikibooks.org/wiki/Scheme" class="extiw" title="wikibooks:Scheme">Scheme</a> at Wikibooks</li></ul> </td></tr></tbody></table> <p><b>Scheme</b> is a <a href="/wiki/Programming_language_dialect" class="mw-redirect" title="Programming language dialect">dialect</a> of the <a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a> family of <a href="/wiki/Programming_language" title="Programming language">programming languages</a>. Scheme was created during the 1970s at the <a href="/wiki/MIT_Computer_Science_and_Artificial_Intelligence_Laboratory" title="MIT Computer Science and Artificial Intelligence Laboratory">MIT Computer Science and Artificial Intelligence Laboratory</a> (MIT CSAIL) and released by its developers, <a href="/wiki/Guy_L._Steele" class="mw-redirect" title="Guy L. Steele">Guy L. Steele</a> and <a href="/wiki/Gerald_Jay_Sussman" title="Gerald Jay Sussman">Gerald Jay Sussman</a>, via a series of memos now known as the <a href="/wiki/Lambda_Papers" class="mw-redirect" title="Lambda Papers">Lambda Papers</a>. It was the first dialect of Lisp to choose <a href="/wiki/Scope_(computer_science)#Lexical_scoping_and_dynamic_scoping" title="Scope (computer science)">lexical scope</a> and the first to require implementations to perform <a href="/wiki/Tail-call_optimization" class="mw-redirect" title="Tail-call optimization">tail-call optimization</a>, giving stronger support for functional programming and associated techniques such as recursive algorithms. It was also one of the first programming languages to support <a href="/wiki/First-class_object" class="mw-redirect" title="First-class object">first-class</a> <a href="/wiki/Continuation" title="Continuation">continuations</a>. It had a significant influence on the effort that led to the development of <a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a>.<sup id="cite_ref-cl_steele_2-0" class="reference"><a href="#cite_note-cl_steele-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> </p><p>The Scheme language is standardized in the official <a href="/wiki/Institute_of_Electrical_and_Electronics_Engineers" title="Institute of Electrical and Electronics Engineers">Institute of Electrical and Electronics Engineers</a> (IEEE) standard<sup id="cite_ref-ieee1178_3-0" class="reference"><a href="#cite_note-ieee1178-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> and a <i>de facto</i> standard called the <i>Revised<span style="padding-left:0.12em;"><sup>n</sup></span> Report on the Algorithmic Language Scheme</i> (R<i>n</i>RS). A widely implemented standard is R5RS (1998).<sup id="cite_ref-r5rs_4-0" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> The most recently ratified standard of Scheme is "R7RS-small" (2013).<sup id="cite_ref-r7rs_5-0" class="reference"><a href="#cite_note-r7rs-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> The more expansive and modular R6RS was ratified in 2007.<sup id="cite_ref-r6rs_6-0" class="reference"><a href="#cite_note-r6rs-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> Both trace their descent from R5RS; the timeline below reflects the chronological order of ratification. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="History">History</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=1" title="Edit section: History"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1236090951">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}</style><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/History_of_the_Scheme_programming_language" title="History of the Scheme programming language">History of the Scheme programming language</a></div> <div class="mw-heading mw-heading3"><h3 id="Origins">Origins</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=2" title="Edit section: Origins"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Scheme started in the 1970s as an attempt to understand <a href="/wiki/Carl_Hewitt" title="Carl Hewitt">Carl Hewitt</a>'s <a href="/wiki/Actor_model" title="Actor model">Actor model</a>, for which purpose Steele and Sussman wrote a "tiny Lisp interpreter" using <a href="/wiki/Maclisp" title="Maclisp">Maclisp</a> and then "added mechanisms for creating actors and sending messages".<sup id="cite_ref-revisited_7-0" class="reference"><a href="#cite_note-revisited-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Scheme was originally called "Schemer", in the tradition of other <a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>-derived languages such as <a href="/wiki/Planner_(programming_language)" title="Planner (programming language)">Planner</a> or <i>Conniver</i>. The current name resulted from the authors' use of the <a href="/wiki/Incompatible_Timesharing_System" title="Incompatible Timesharing System">ITS operating system</a>, which limited filenames to two components of at most six characters each. Currently, "Schemer" is commonly used to refer to a Scheme programmer. </p> <div class="mw-heading mw-heading3"><h3 id="R6RS">R6RS</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=3" title="Edit section: R6RS"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A new language standardization process began at the 2003 Scheme workshop, with the goal of producing an R6RS standard in 2006. This process broke with the earlier R<i>n</i>RS approach of unanimity. </p><p>R6RS features a standard module system, allowing a split between the core language and <a href="/wiki/Library_(computing)" title="Library (computing)">libraries</a>. Several drafts of the R6RS specification were released, the final version being R5.97RS. A successful vote resulted in ratifying the new standard, announced on August 28, 2007.<sup id="cite_ref-r6rs_6-1" class="reference"><a href="#cite_note-r6rs-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> </p><p>Currently the newest releases of various Scheme implementations<sup id="cite_ref-rs6s_Implementations_8-0" class="reference"><a href="#cite_note-rs6s_Implementations-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> support the R6RS standard. There is a portable reference implementation of the proposed implicitly phased libraries for R6RS, called psyntax, which loads and bootstraps itself properly on various older Scheme implementations.<sup id="cite_ref-psyntax_9-0" class="reference"><a href="#cite_note-psyntax-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> </p><p>A feature of R6RS is the record-type descriptor (RTD). When an RTD is created and used, the record type representation can show the memory layout. It also calculated object field bit mask and mutable Scheme object field bit masks, and helped the garbage collector know what to do with the fields without traversing the whole fields list that are saved in the RTD. RTD allows users to expand the basic RTD to create a new record system.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> </p><p>R6RS introduces numerous significant changes to the language.<sup id="cite_ref-r6rs_Language_changes_11-0" class="reference"><a href="#cite_note-r6rs_Language_changes-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> The source code is now specified in <a href="/wiki/Unicode" title="Unicode">Unicode</a>, and a large subset of Unicode characters may now appear in Scheme symbols and <a href="/wiki/Identifier" title="Identifier">identifiers</a>, and there are other minor changes to the lexical rules. Character data is also now specified in Unicode. Many standard procedures have been moved to the new standard libraries, which themselves form a large expansion of the standard, containing procedures and syntactic forms that were formerly not part of the standard. A new module system has been introduced, and systems for exception handling are now standardized. Syntax-rules has been replaced with a more expressive syntactic abstraction facility (syntax-case) which allows the use of all of Scheme at macro expansion time. Compliant implementations are now <i>required</i> to support Scheme's full <a href="/wiki/Numerical_tower" title="Numerical tower">numeric tower</a>, and the semantics of numbers have been expanded, mainly in the direction of support for the <a href="/wiki/IEEE_754-1985" title="IEEE 754-1985">IEEE 754</a> standard for floating point numerical representation. </p> <div class="mw-heading mw-heading3"><h3 id="R7RS">R7RS</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=4" title="Edit section: R7RS"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The R6RS standard has caused controversy because some see it as a departure from the minimalist philosophy.<sup id="cite_ref-r6rs_electorate_12-0" class="reference"><a href="#cite_note-r6rs_electorate-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-r6rs_feeley_13-0" class="reference"><a href="#cite_note-r6rs_feeley-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> In August 2009, the Scheme Steering Committee, which oversees the standardization process, announced its intention to recommend splitting Scheme into two languages: a large modern programming language for programmers; and a small version, a subset of the large version retaining the minimalism praised by educators and casual implementors.<sup id="cite_ref-position_paper_14-0" class="reference"><a href="#cite_note-position_paper-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> Two working groups were created to work on these two new versions of Scheme. The Scheme Reports Process site has links to the working groups' charters, public discussions and issue tracking system. </p><p>The ninth draft of R7RS (small language) was made available on April 15, 2013.<sup id="cite_ref-r7rs-draft-9_15-0" class="reference"><a href="#cite_note-r7rs-draft-9-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> A vote ratifying this draft closed on May 20, 2013,<sup id="cite_ref-r7rs_clinger_16-0" class="reference"><a href="#cite_note-r7rs_clinger-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> and the final report has been available since August 6, 2013, describing "the 'small' language of that effort: therefore it cannot be considered in isolation as the successor to R6RS".<sup id="cite_ref-r7rs_5-1" class="reference"><a href="#cite_note-r7rs-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> </p> <table class="toccolours" style="font-size:88%"> <caption style="font-size:112%"><style data-mw-deduplicate="TemplateStyles:r1045256916">.mw-parser-output .navbar-header{text-align:center;position:relative;white-space:nowrap}.mw-parser-output .navbar-header .navbar{position:absolute;right:0;top:0;margin:0 5px}</style><div class="navbar-header">Timeline of Lisp dialects<link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Lisp" title="Template:Lisp"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Lisp" title="Template talk:Lisp"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Lisp" title="Special:EditPage/Template:Lisp"><abbr title="Edit this template">e</abbr></a></li></ul></div></div> </caption> <tbody><tr style="background:lavender;"> <th width="7%">1958 </th> <th width="7%">1960 </th> <th width="7%">1965 </th> <th width="7%">1970 </th> <th width="7%">1975 </th> <th width="7%">1980 </th> <th width="7%">1985 </th> <th width="7%">1990 </th> <th width="7%">1995 </th> <th width="7%">2000 </th> <th width="7%">2005 </th> <th width="7%">2010 </th> <th width="8%">2015 </th> <th width="8%">2020 </th></tr> <tr> <th align="left" colspan="3" style="background:lightgray"> LISP 1, 1.5, <a href="/wiki/LISP_2" title="LISP 2">LISP 2<sup>(abandoned)</sup></a> </th> <td colspan="10"> </td></tr> <tr> <td colspan="2"> </td> <th align="left" colspan="5" style="background:lightgray"> <a href="/wiki/Maclisp" title="Maclisp">Maclisp</a> </th> <td colspan="6"> </td></tr> <tr> <td colspan="3"> </td> <th align="left" colspan="5" style="background:lightgray"> <a href="/wiki/Interlisp" title="Interlisp">Interlisp</a> </th> <td colspan="5"> </td></tr> <tr> <td colspan="3"> </td> <th align="left" colspan="2" style="background:lightgray"> <a href="/wiki/MDL_(programming_language)" title="MDL (programming language)">MDL</a> </th> <td colspan="5"> </td></tr> <tr> <td colspan="4"> </td> <th align="left" colspan="5" style="background:lightgray"> <a href="/wiki/Lisp_Machine_Lisp" title="Lisp Machine Lisp">Lisp Machine Lisp</a> </th> <td colspan="4"> </td></tr> <tr> <td colspan="4"> </td> <th align="left" colspan="4" style="background:lightgray"> <a class="mw-selflink selflink">Scheme</a> </th> <th align="left" colspan="2" style="background:lightgray"> R5RS </th> <th align="left" colspan="1" style="background:lightgray"> R6RS </th> <th align="left" colspan="3" style="background:lightgray"> R7RS small </th></tr> <tr> <td colspan="4"> </td> <th align="left" colspan="2" style="background:lightgray"> <a href="/wiki/NIL_(programming_language)" title="NIL (programming language)">NIL</a> </th></tr> <tr> <td colspan="5"> </td> <th align="left" colspan="2" style="background:lightgray"> <a href="/wiki/Z-machine#ZIL_(Zork_Implementation_Language)" title="Z-machine">ZIL (Zork Implementation Language)</a> </th></tr> <tr> <td colspan="5"> </td> <th align="left" colspan="2" style="background:lightgray"> <a href="/wiki/Franz_Lisp" title="Franz Lisp">Franz Lisp</a> </th></tr> <tr> <td colspan="5"> </td> <th align="left" colspan="2" style="background:lightgray"> <a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a> </th> <th align="left" colspan="7" style="background:lightgray"> ANSI standard </th></tr> <tr> <td colspan="5"> </td> <th align="left" colspan="9" style="background:lightgray"> <a href="/wiki/Le_Lisp" title="Le Lisp">Le Lisp</a> </th></tr> <tr> <td colspan="5"> </td> <th align="left" colspan="11" style="background:lightgray"> <a href="/wiki/MIT_Scheme" class="mw-redirect" title="MIT Scheme">MIT Scheme</a> </th></tr> <tr> <td colspan="5"> </td> <th align="left" colspan="4" style="background:lightgray"> <a href="/wiki/XLISP" title="XLISP">XLISP</a> </th></tr> <tr> <td colspan="6"> </td> <th align="left" colspan="3" style="background:lightgray"> <a href="/wiki/T_(programming_language)" title="T (programming language)">T</a> </th> <td colspan="4"> </td></tr> <tr> <td colspan="6"> </td> <th align="left" colspan="8" style="background:lightgray"> <a href="/wiki/Chez_Scheme" title="Chez Scheme">Chez Scheme</a> </th></tr> <tr> <td colspan="6"> </td> <th align="left" colspan="8" style="background:lightgray"> <a href="/wiki/Emacs_Lisp" title="Emacs Lisp">Emacs Lisp</a> </th></tr> <tr> <td colspan="6"> </td> <th align="left" colspan="8" style="background:lightgray"> <a href="/wiki/AutoLISP" title="AutoLISP">AutoLISP</a> </th></tr> <tr> <td colspan="6"> </td> <th align="left" colspan="8" style="background:lightgray"> <a href="/wiki/PicoLisp" title="PicoLisp">PicoLisp</a> </th></tr> <tr> <td colspan="6"> </td> <th align="left" colspan="8" style="background:lightgray"> <a href="/wiki/Gambit_(Scheme_implementation)" title="Gambit (Scheme implementation)">Gambit</a> </th></tr> <tr> <td colspan="7"> </td> <th align="left" colspan="6" style="background:lightgray"> <a href="/wiki/EuLisp" title="EuLisp">EuLisp</a> </th></tr> <tr> <td colspan="7"> </td> <th align="left" colspan="8" style="background:lightgray"> <a href="/wiki/ISLISP" title="ISLISP">ISLISP</a> </th></tr> <tr> <td colspan="7"> </td> <th align="left" colspan="8" style="background:lightgray"> <a href="/wiki/OpenLisp" title="OpenLisp">OpenLisp</a> </th></tr> <tr> <td colspan="7"> </td> <th align="left" colspan="4" style="background:lightgray"> <a href="/wiki/PLT_Scheme" class="mw-redirect" title="PLT Scheme">PLT Scheme</a> </th> <th align="left" colspan="3" style="background:lightgray"> <a href="/wiki/Racket_(programming_language)" title="Racket (programming language)">Racket</a> </th></tr> <tr> <td colspan="7"> </td> <th align="left" colspan="7" style="background:lightgray"> <a href="/wiki/NewLISP" title="NewLISP">newLISP</a> </th></tr> <tr> <td colspan="7"> </td> <th align="left" colspan="7" style="background:lightgray"> <a href="/wiki/GNU_Guile" title="GNU Guile">GNU Guile</a> </th></tr> <tr> <td colspan="9"> </td> <th align="left" colspan="5" style="background:lightgray"> <a href="/wiki/AutoLISP" title="AutoLISP">Visual LISP</a> </th></tr> <tr> <td colspan="10"> </td> <th align="left" colspan="4" style="background:lightgray"> <a href="/wiki/Clojure" title="Clojure">Clojure</a> </th></tr> <tr> <td colspan="10"> </td> <th align="left" colspan="4" style="background:lightgray"> <a href="/wiki/Arc_(programming_language)" title="Arc (programming language)">Arc</a> </th></tr> <tr> <td colspan="10"> </td> <th align="left" colspan="4" style="background:lightgray"> <a href="/wiki/LFE_(programming_language)" title="LFE (programming language)">LFE</a> </th></tr> <tr> <td colspan="11"> </td> <th align="left" colspan="3" style="background:lightgray"> <a href="/wiki/Hy_(programming_language)" title="Hy (programming language)">Hy</a> </th></tr> <tr> <td colspan="13"> </td> <th align="left" colspan="3" style="background:lightgray"> <a href="/w/index.php?title=Chialisp&action=edit&redlink=1" class="new" title="Chialisp (page does not exist)">Chialisp</a> </th></tr> </tbody></table> <div class="mw-heading mw-heading2"><h2 id="Distinguishing_features">Distinguishing features</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=5" title="Edit section: Distinguishing features"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">See also: <a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp (programming language)</a></div> <p>Scheme is primarily a <a href="/wiki/Functional_programming" title="Functional programming">functional programming</a> language. It shares many characteristics with other members of the Lisp programming language family. Scheme's very simple syntax is based on <a href="/wiki/S-expression" title="S-expression">s-expressions</a>, parenthesized lists in which a prefix operator is followed by its arguments. Scheme programs thus consist of sequences of nested lists. Lists are also the main data structure in Scheme, leading to a close equivalence between source code and data formats (<a href="/wiki/Homoiconicity" title="Homoiconicity">homoiconicity</a>). Scheme programs can easily create and evaluate pieces of Scheme code dynamically. </p><p>The reliance on lists as data structures is shared by all Lisp dialects. Scheme inherits a rich set of <a href="/wiki/List_(computing)" class="mw-redirect" title="List (computing)">list-processing</a> primitives such as <a href="/wiki/Cons" title="Cons"><code>cons</code></a>, <a href="/wiki/CAR_and_CDR" title="CAR and CDR"><code>car</code> and <code>cdr</code></a> from its Lisp progenitors. Scheme uses strictly but <a href="/wiki/Type_system" title="Type system">dynamically typed variables</a> and supports <a href="/wiki/First-class_function" title="First-class function">first class procedures</a>. Thus, procedures can be assigned as values to variables or passed as arguments to procedures. </p><p>This section concentrates mainly on innovative features of the language, including those features that distinguish Scheme from other Lisps. Unless stated otherwise, descriptions of features relate to the R5RS standard. In examples provided in this section, the notation "===> result" is used to indicate the result of evaluating the expression on the immediately preceding line. This is the same convention used in R5RS. </p> <div class="mw-heading mw-heading3"><h3 id="Minimalism">Minimalism</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=6" title="Edit section: Minimalism"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Minimalism_(computing)" title="Minimalism (computing)">Minimalism (computing)</a></div> <p>Scheme is a very simple language, much easier to implement than many other languages of comparable <a href="/wiki/Expressive_power_(computer_science)" title="Expressive power (computer science)">expressive power</a>.<sup id="cite_ref-easy_to_implement_scheme48_17-0" class="reference"><a href="#cite_note-easy_to_implement_scheme48-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> This ease is attributable to the use of <a href="/wiki/Lambda_calculus" title="Lambda calculus">lambda calculus</a> to derive much of the syntax of the language from more primitive forms. For instance of the 23 s-expression-based syntactic constructs defined in the R5RS Scheme standard, 14 are classed as derived or library forms, which can be written as macros involving more fundamental forms, principally lambda. As R5RS (§3.1) says: "The most fundamental of the variable binding constructs is the lambda expression, because all other variable binding constructs can be explained in terms of lambda expressions."<sup id="cite_ref-r5rs_4-1" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> </p> <dl><dd><b>Fundamental forms</b>: define, lambda, quote, if, define-syntax, let-syntax, letrec-syntax, syntax-rules, set!</dd> <dd><b>Derived forms</b>: do, let, let*, letrec, cond, case, and, or, begin, named let, delay, unquote, unquote-splicing, quasiquote</dd></dl> <p>Example: a macro to implement <code>let</code> as an expression using <code>lambda</code> to perform the variable bindings. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">define-syntax</span><span class="w"> </span><span class="k">let</span> <span class="w"> </span><span class="p">(</span><span class="k">syntax-rules</span><span class="w"> </span><span class="p">()</span> <span class="w"> </span><span class="p">((</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">var</span><span class="w"> </span><span class="nv">expr</span><span class="p">)</span><span class="w"> </span><span class="o">...</span><span class="p">)</span><span class="w"> </span><span class="nv">body</span><span class="w"> </span><span class="o">...</span><span class="p">)</span> <span class="w"> </span><span class="p">((</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">var</span><span class="w"> </span><span class="o">...</span><span class="p">)</span><span class="w"> </span><span class="nv">body</span><span class="w"> </span><span class="o">...</span><span class="p">)</span><span class="w"> </span><span class="nv">expr</span><span class="w"> </span><span class="o">...</span><span class="p">))))</span> </pre></div> <p>Thus using <code>let</code> as defined above a Scheme implementation would rewrite "<code>(let ((a 1)(b 2)) (+ b a))</code>" as "<code>((lambda (a b) (+ b a)) 1 2)</code>", which reduces implementation's task to that of coding procedure instantiations. </p><p>In 1998, Sussman and Steele remarked that the minimalism of Scheme was not a conscious design goal, but rather the unintended outcome of the design process. "We were actually trying to build something complicated and discovered, serendipitously, that we had accidentally designed something that met all our goals but was much simpler than we had intended....we realized that the lambda calculus—a small, simple formalism—could serve as the core of a powerful and expressive programming language."<sup id="cite_ref-revisited_7-1" class="reference"><a href="#cite_note-revisited-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Lexical_scope">Lexical scope</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=7" title="Edit section: Lexical scope"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">See also: <a href="/wiki/Scope_(programming)" class="mw-redirect" title="Scope (programming)">Scope (programming)</a></div> <p>Like most modern programming languages and unlike earlier Lisps such as <a href="/wiki/Maclisp" title="Maclisp">Maclisp</a>, Scheme is lexically scoped: all possible variable bindings in a program unit can be analyzed by reading the text of the program unit without consideration of the contexts in which it may be called. This contrasts with dynamic scoping which was characteristic of early Lisp dialects, because of the processing costs associated with the primitive textual substitution methods used to implement lexical scoping algorithms in compilers and interpreters of the day. In those Lisps, it was perfectly possible for a reference to a <a href="/wiki/Free_variable" class="mw-redirect" title="Free variable">free variable</a> inside a procedure to refer to quite distinct bindings external to the procedure, depending on the context of the call. </p><p>The impetus to incorporate lexical scoping, which was an unusual scoping model in the early 1970s, into their new version of Lisp, came from Sussman's studies of <a href="/wiki/ALGOL" title="ALGOL">ALGOL</a>. He suggested that <a href="/wiki/Block_(programming)" title="Block (programming)">ALGOL-like lexical scoping mechanisms</a> would help to realize their initial goal of implementing <a href="/wiki/Carl_Hewitt#Actor_model" title="Carl Hewitt">Hewitt's Actor model</a> in Lisp.<sup id="cite_ref-revisited_7-2" class="reference"><a href="#cite_note-revisited-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> </p><p>The key insights on how to introduce lexical scoping into a Lisp dialect were popularized in Sussman and Steele's 1975 Lambda Paper, "Scheme: An Interpreter for Extended Lambda Calculus",<sup id="cite_ref-lambda_paper_1_18-0" class="reference"><a href="#cite_note-lambda_paper_1-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> where they adopted the concept of the <a href="/wiki/Closure_(computer_science)" class="mw-redirect" title="Closure (computer science)">lexical closure</a> (on page 21), which had been described in an <a href="/wiki/AI_Memo" title="AI Memo">AI Memo</a> in 1970 by <a href="/wiki/Joel_Moses" title="Joel Moses">Joel Moses</a>, who attributed the idea to <a href="/wiki/Peter_J._Landin" class="mw-redirect" title="Peter J. Landin">Peter J. Landin</a>.<sup id="cite_ref-Moses_19-0" class="reference"><a href="#cite_note-Moses-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Lambda_calculus">Lambda calculus</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=8" title="Edit section: Lambda calculus"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">See also: <a href="/wiki/Lambda_calculus" title="Lambda calculus">Lambda calculus</a></div> <p><a href="/wiki/Alonzo_Church" title="Alonzo Church">Alonzo Church</a>'s mathematical notation, the lambda calculus, has inspired Lisp's use of "lambda" as a keyword for introducing a procedure, as well as influencing the development of <a href="/wiki/Functional_programming" title="Functional programming">functional programming</a> techniques involving the use of <a href="/wiki/Higher-order_function" title="Higher-order function">higher-order functions</a> in Lisp. But early Lisps were not suitable expressions of the lambda calculus because of their treatment of <a href="/wiki/Free_variables_and_bound_variables" title="Free variables and bound variables">free variables</a>.<sup id="cite_ref-revisited_7-3" class="reference"><a href="#cite_note-revisited-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> </p><p>A formal lambda system has axioms and a complete calculation rule. It is helpful for the analysis using mathematical logic and tools. In this system, calculation can be seen as a directional deduction. The syntax of lambda calculus follows the recursive expressions from x, y, z, ...,parentheses, spaces, the period and the symbol λ.<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> The function of lambda calculation includes: First, serve as a starting point of powerful mathematical logic. Second, it can reduce the requirement of programmers to consider the implementation details, because it can be used to imitate machine evaluation. Finally, the lambda calculation created a substantial meta-theory.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> </p><p>The introduction of lexical scope resolved the problem by making an equivalence between some forms of lambda notation and their practical expression in a working programming language. Sussman and Steele showed that the new language could be used to elegantly derive all the imperative and declarative semantics of other programming languages including ALGOL and <a href="/wiki/Fortran" title="Fortran">Fortran</a>, and the dynamic scope of other Lisps, by using lambda expressions not as simple procedure instantiations but as "control structures and environment modifiers".<sup id="cite_ref-lambda_paper_2_22-0" class="reference"><a href="#cite_note-lambda_paper_2-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> They introduced <a href="/wiki/Continuation-passing_style" title="Continuation-passing style">continuation-passing style</a> along with their first description of Scheme in the first of the Lambda Papers, and in subsequent papers, they proceeded to demonstrate the raw power of this practical use of lambda calculus. </p> <div class="mw-heading mw-heading3"><h3 id="Block_structure">Block structure</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=9" title="Edit section: Block structure"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Scheme inherits its block structure from earlier block structured languages, particularly <a href="/wiki/ALGOL" title="ALGOL">ALGOL</a>. In Scheme, blocks are implemented by three <i>binding constructs</i>: <a href="/wiki/Let_expression" title="Let expression"><code>let</code></a>, <code>let*</code> and <code>letrec</code>. For instance, the following construct creates a <a href="/wiki/Block_(programming)" title="Block (programming)">block</a> in which a symbol called <code>var</code> is bound to the number 10: </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="nv">var</span><span class="w"> </span><span class="s">"goose"</span><span class="p">)</span> <span class="c1">;; Any reference to var here will be bound to "goose"</span> <span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">var</span><span class="w"> </span><span class="mi">10</span><span class="p">))</span> <span class="w"> </span><span class="c1">;; statements go here. Any reference to var here will be bound to 10.</span> <span class="w"> </span><span class="p">)</span> <span class="c1">;; Any reference to var here will be bound to "goose"</span> </pre></div> <p>Blocks can be <a href="/wiki/Nesting_(computing)" title="Nesting (computing)">nested</a> to create arbitrarily complex block structures according to the need of the programmer. The use of block structuring to create local bindings alleviates the risk of <a href="/wiki/Naming_collision" title="Naming collision">namespace collision</a> that can otherwise occur. </p><p>One variant of <code>let</code>, <code>let*</code>, permits bindings to refer to variables defined earlier in the same construct, thus: </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">let*</span><span class="w"> </span><span class="p">((</span><span class="nf">var1</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="nf">var2</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="nv">var1</span><span class="w"> </span><span class="mi">12</span><span class="p">)))</span> <span class="w"> </span><span class="c1">;; But the definition of var1 could not refer to var2</span> <span class="w"> </span><span class="p">)</span> </pre></div> <p>The other variant, <code>letrec</code>, is designed to enable <a href="/wiki/Mutual_recursion" title="Mutual recursion">mutually recursive</a> procedures to be bound to one another. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">;; Calculation of Hofstadter's male and female sequences as a list of pairs</span> <span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="p">(</span><span class="nf">hofstadter-male-female</span><span class="w"> </span><span class="nv">n</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="k">letrec</span><span class="w"> </span><span class="p">((</span><span class="nf">female</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">n</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nb">=</span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span> <span class="w"> </span><span class="mi">1</span> <span class="w"> </span><span class="p">(</span><span class="nb">-</span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="p">(</span><span class="nf">male</span><span class="w"> </span><span class="p">(</span><span class="nf">female</span><span class="w"> </span><span class="p">(</span><span class="nb">-</span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="mi">1</span><span class="p">)))))))</span> <span class="w"> </span><span class="p">(</span><span class="nf">male</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">n</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nb">=</span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span> <span class="w"> </span><span class="mi">0</span> <span class="w"> </span><span class="p">(</span><span class="nb">-</span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="p">(</span><span class="nf">female</span><span class="w"> </span><span class="p">(</span><span class="nf">male</span><span class="w"> </span><span class="p">(</span><span class="nb">-</span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="mi">1</span><span class="p">))))))))</span> <span class="w"> </span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="nv">loop</span><span class="w"> </span><span class="p">((</span><span class="nf">i</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span> <span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nb">></span><span class="w"> </span><span class="nv">i</span><span class="w"> </span><span class="nv">n</span><span class="p">)</span> <span class="w"> </span><span class="o">'</span><span class="p">()</span> <span class="w"> </span><span class="p">(</span><span class="nb">cons</span><span class="w"> </span><span class="p">(</span><span class="nb">cons</span><span class="w"> </span><span class="p">(</span><span class="nf">female</span><span class="w"> </span><span class="nv">i</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="nf">male</span><span class="w"> </span><span class="nv">i</span><span class="p">))</span> <span class="w"> </span><span class="p">(</span><span class="nf">loop</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="nv">i</span><span class="w"> </span><span class="mi">1</span><span class="p">)))))))</span> <span class="p">(</span><span class="nf">hofstadter-male-female</span><span class="w"> </span><span class="mi">8</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="p">((</span><span class="mi">1</span><span class="w"> </span><span class="o">.</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="o">.</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="mi">2</span><span class="w"> </span><span class="o">.</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="mi">2</span><span class="w"> </span><span class="o">.</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="mi">3</span><span class="w"> </span><span class="o">.</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="mi">3</span><span class="w"> </span><span class="o">.</span><span class="w"> </span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="mi">4</span><span class="w"> </span><span class="o">.</span><span class="w"> </span><span class="mi">4</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="mi">5</span><span class="w"> </span><span class="o">.</span><span class="w"> </span><span class="mi">4</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="mi">5</span><span class="w"> </span><span class="o">.</span><span class="w"> </span><span class="mi">5</span><span class="p">))</span> </pre></div> <p>(See <a href="/wiki/Hofstadter_sequence#Hofstadter_Female_and_Male_sequences" title="Hofstadter sequence">Hofstadter's male and female sequences</a> for the definitions used in this example.) </p><p>All procedures bound in a single <code>letrec</code> may refer to one another by name, as well as to values of variables defined earlier in the same <code>letrec</code>, but they may not refer to <i>values</i> defined later in the same <code>letrec</code>. </p><p>A variant of <code>let</code>, the "named let" form, has an identifier after the <code>let</code> keyword. This binds the let variables to the argument of a procedure whose name is the given identifier and whose body is the body of the let form. The body may be repeated as desired by calling the procedure. The named let is widely used to implement iteration. </p><p>Example: a simple counter </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="nv">loop</span><span class="w"> </span><span class="p">((</span><span class="nf">n</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span> <span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nb">></span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span> <span class="w"> </span><span class="o">'</span><span class="p">()</span> <span class="w"> </span><span class="p">(</span><span class="nb">cons</span><span class="w"> </span><span class="nv">n</span> <span class="w"> </span><span class="p">(</span><span class="nf">loop</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="mi">1</span><span class="p">)))))</span> <span class="nv">===></span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="mi">6</span><span class="w"> </span><span class="mi">7</span><span class="w"> </span><span class="mi">8</span><span class="w"> </span><span class="mi">9</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span> </pre></div> <p>Like any procedure in Scheme, the procedure created in the named let is a first-class object. </p> <div class="mw-heading mw-heading3"><h3 id="Proper_tail_recursion">Proper tail recursion</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=10" title="Edit section: Proper tail recursion"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Tail_recursion" class="mw-redirect" title="Tail recursion">Tail recursion</a></div> <p>Scheme has an iteration construct, <code>do</code>, but it is more <a href="/wiki/Programming_idiom" title="Programming idiom">idiomatic</a> in Scheme to use <a href="/wiki/Tail_recursion" class="mw-redirect" title="Tail recursion">tail recursion</a> to express <a href="/wiki/Iteration" title="Iteration">iteration</a>. Standard-conforming Scheme implementations are required to optimize tail calls so as to support an unbounded number of active tail calls (R5RS sec. 3.5)<sup id="cite_ref-r5rs_4-2" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>—a property the Scheme report describes as <i>proper tail recursion</i>—making it safe for Scheme programmers to write iterative algorithms using recursive structures, which are sometimes more intuitive. Tail recursive procedures and the <i>named <code>let</code></i> form provide support for iteration using tail recursion. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">;; Building a list of squares from 0 to 9:</span> <span class="c1">;; Note: loop is simply an arbitrary symbol used as a label. Any symbol will do.</span> <span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="p">(</span><span class="nf">list-of-squares</span><span class="w"> </span><span class="nv">n</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="nv">loop</span><span class="w"> </span><span class="p">((</span><span class="nf">i</span><span class="w"> </span><span class="nv">n</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nf">res</span><span class="w"> </span><span class="o">'</span><span class="p">()))</span> <span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nb"><</span><span class="w"> </span><span class="nv">i</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span> <span class="w"> </span><span class="nv">res</span> <span class="w"> </span><span class="p">(</span><span class="nf">loop</span><span class="w"> </span><span class="p">(</span><span class="nb">-</span><span class="w"> </span><span class="nv">i</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">cons</span><span class="w"> </span><span class="p">(</span><span class="nb">*</span><span class="w"> </span><span class="nv">i</span><span class="w"> </span><span class="nv">i</span><span class="p">)</span><span class="w"> </span><span class="nv">res</span><span class="p">)))))</span> <span class="p">(</span><span class="nf">list-of-squares</span><span class="w"> </span><span class="mi">9</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="mi">9</span><span class="w"> </span><span class="mi">16</span><span class="w"> </span><span class="mi">25</span><span class="w"> </span><span class="mi">36</span><span class="w"> </span><span class="mi">49</span><span class="w"> </span><span class="mi">64</span><span class="w"> </span><span class="mi">81</span><span class="p">)</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="First-class_continuations">First-class continuations</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=11" title="Edit section: First-class continuations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Continuation" title="Continuation">Continuation</a></div> <p>Continuations in Scheme are <a href="/wiki/First-class_object" class="mw-redirect" title="First-class object">first-class objects</a>. Scheme provides the procedure <code><a href="/wiki/Call-with-current-continuation" title="Call-with-current-continuation">call-with-current-continuation</a></code> (also known as <code>call/cc</code>) to capture the current continuation by packing it up as an escape procedure bound to a formal argument in a procedure provided by the programmer. (R5RS sec. 6.4)<sup id="cite_ref-r5rs_4-3" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> First-class continuations enable the programmer to create non-local <a href="/wiki/Control_flow" title="Control flow">control constructs</a> such as <a href="/wiki/Iterator" title="Iterator">iterators</a>, <a href="/wiki/Coroutine" title="Coroutine">coroutines</a>, and <a href="/wiki/Backtracking" title="Backtracking">backtracking</a>. </p><p>Continuations can be used to emulate the behavior of <a href="/wiki/Return_statement" title="Return statement">return statements</a> in imperative programming languages. The following function <code>find-first</code>, given function <code>func</code> and list <code>lst</code>, returns the first element <code>x</code> in <code>lst</code> such that <code>(func x)</code> returns true. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="p">(</span><span class="nf">find-first</span><span class="w"> </span><span class="nv">func</span><span class="w"> </span><span class="nv">lst</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="nb">call-with-current-continuation</span> <span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">return-immediately</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="nb">for-each</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">x</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nf">func</span><span class="w"> </span><span class="nv">x</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="nf">return-immediately</span><span class="w"> </span><span class="nv">x</span><span class="p">)))</span> <span class="w"> </span><span class="nv">lst</span><span class="p">)</span> <span class="w"> </span><span class="no">#f</span><span class="p">)))</span> <span class="p">(</span><span class="nf">find-first</span><span class="w"> </span><span class="nb">integer?</span><span class="w"> </span><span class="o">'</span><span class="p">(</span><span class="mi">1/2</span><span class="w"> </span><span class="mi">3/4</span><span class="w"> </span><span class="mf">5.6</span><span class="w"> </span><span class="mi">7</span><span class="w"> </span><span class="mi">8/9</span><span class="w"> </span><span class="mi">10</span><span class="w"> </span><span class="mi">11</span><span class="p">))</span> <span class="nv">===></span><span class="w"> </span><span class="mi">7</span> <span class="p">(</span><span class="nf">find-first</span><span class="w"> </span><span class="nb">zero?</span><span class="w"> </span><span class="o">'</span><span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">4</span><span class="p">))</span> <span class="nv">===></span><span class="w"> </span><span class="no">#f</span> </pre></div> <p>The following example, a traditional programmer's puzzle, shows that Scheme can handle continuations as first-class objects, binding them to variables and passing them as arguments to procedures. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">let*</span><span class="w"> </span><span class="p">((</span><span class="nf">yin</span> <span class="w"> </span><span class="p">((</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">cc</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">display</span><span class="w"> </span><span class="s">"@"</span><span class="p">)</span><span class="w"> </span><span class="nv">cc</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">call-with-current-continuation</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">c</span><span class="p">)</span><span class="w"> </span><span class="nv">c</span><span class="p">))))</span> <span class="w"> </span><span class="p">(</span><span class="nf">yang</span> <span class="w"> </span><span class="p">((</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">cc</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">display</span><span class="w"> </span><span class="s">"*"</span><span class="p">)</span><span class="w"> </span><span class="nv">cc</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">call-with-current-continuation</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">c</span><span class="p">)</span><span class="w"> </span><span class="nv">c</span><span class="p">)))))</span> <span class="w"> </span><span class="p">(</span><span class="nf">yin</span><span class="w"> </span><span class="nv">yang</span><span class="p">))</span> </pre></div> <p>When executed this code displays a counting sequence: <code>@*@**@***@****@*****@******@*******@********...</code> </p> <div class="mw-heading mw-heading3"><h3 id="Shared_namespace_for_procedures_and_variables">Shared namespace for procedures and variables</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=12" title="Edit section: Shared namespace for procedures and variables"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In contrast to Common Lisp, all data and procedures in Scheme share a common namespace, whereas in Common Lisp <a href="/wiki/Common_Lisp#The_function_namespace" title="Common Lisp">functions and data have separate namespaces</a> making it possible for a function and a variable to have the same name, and requiring special notation for referring to a function as a value. This is sometimes known as the "<a href="/wiki/Lisp-1_vs._Lisp-2" class="mw-redirect" title="Lisp-1 vs. Lisp-2">Lisp-1 vs. Lisp-2</a>" distinction, referring to the unified namespace of Scheme and the separate namespaces of Common Lisp.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> </p><p>In Scheme, the same primitives that are used to manipulate and bind data can be used to bind procedures. There is no equivalent of Common Lisp's <code>defun</code> and <code>#'</code> primitives. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">;; Variable bound to a number:</span> <span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="nv">f</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span> <span class="nv">f</span> <span class="nv">===></span><span class="w"> </span><span class="mi">10</span> <span class="c1">;; Mutation (altering the bound value)</span> <span class="p">(</span><span class="k">set!</span><span class="w"> </span><span class="nv">f</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="nv">f</span><span class="w"> </span><span class="nv">f</span><span class="w"> </span><span class="mi">6</span><span class="p">))</span> <span class="nv">f</span> <span class="nv">===></span><span class="w"> </span><span class="mi">26</span> <span class="c1">;; Assigning a procedure to the same variable:</span> <span class="p">(</span><span class="k">set!</span><span class="w"> </span><span class="nv">f</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">n</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="mi">12</span><span class="p">)))</span> <span class="p">(</span><span class="nf">f</span><span class="w"> </span><span class="mi">6</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="mi">18</span> <span class="c1">;; Assigning the result of an expression to the same variable:</span> <span class="p">(</span><span class="k">set!</span><span class="w"> </span><span class="nv">f</span><span class="w"> </span><span class="p">(</span><span class="nf">f</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span> <span class="nv">f</span> <span class="nv">===></span><span class="w"> </span><span class="mi">13</span> <span class="c1">;; functional programming:</span> <span class="p">(</span><span class="nb">apply</span><span class="w"> </span><span class="nb">+</span><span class="w"> </span><span class="o">'</span><span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="mi">6</span><span class="p">))</span> <span class="nv">===></span><span class="w"> </span><span class="mi">21</span> <span class="p">(</span><span class="k">set!</span><span class="w"> </span><span class="nv">f</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">n</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="mi">100</span><span class="p">)))</span> <span class="p">(</span><span class="nb">map</span><span class="w"> </span><span class="nv">f</span><span class="w"> </span><span class="o">'</span><span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="p">))</span> <span class="nv">===></span><span class="w"> </span><span class="p">(</span><span class="mi">101</span><span class="w"> </span><span class="mi">102</span><span class="w"> </span><span class="mi">103</span><span class="p">)</span> </pre></div> <div class="mw-heading mw-heading2"><h2 id="Implementation_standards">Implementation standards</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=13" title="Edit section: Implementation standards"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>This subsection documents design decisions that have been taken over the years which have given Scheme a particular character, but are not the direct outcomes of the original design. </p> <div class="mw-heading mw-heading3"><h3 id="Numerical_tower">Numerical tower</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=14" title="Edit section: Numerical tower"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Numerical_tower" title="Numerical tower">Numerical tower</a></div> <p>Scheme specifies a comparatively full set of numerical datatypes including <a href="/wiki/Complex_number" title="Complex number">complex</a> and <a href="/wiki/Rational_number" title="Rational number">rational</a> types, which is known in Scheme as the numerical tower (R5RS sec. 6.2<sup id="cite_ref-r5rs_4-4" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>). The standard treats these as abstractions, and does not commit the implementor to any particular internal representations. </p><p>Numbers may have the quality of exactness. An exact number can only be produced by a sequence of exact operations involving other exact numbers—inexactness is thus contagious. The standard specifies that any two implementations must produce equivalent results for all operations resulting in exact numbers. </p><p>The R5RS standard specifies procedures <code>exact->inexact</code> and <code>inexact->exact</code> which can be used to change the exactness of a number. <code>inexact->exact</code> produces "the exact number that is numerically closest to the argument". <code>exact->inexact</code> produces "the inexact number that is numerically closest to the argument". The R6RS standard omits these procedures from the main report, but specifies them as R5RS compatibility procedures in the standard library (rnrs r5rs (6)). </p><p>In the R5RS standard, Scheme implementations are not required to implement the whole numerical tower, but they must implement "a coherent subset consistent with both the purposes of the implementation and the spirit of the Scheme language" (R5RS sec. 6.2.3).<sup id="cite_ref-r5rs_4-5" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> The new R6RS standard does require implementation of the whole tower, and "exact integer objects and exact rational number objects of practically unlimited size and precision, and to implement certain procedures...so they always return exact results when given exact arguments" (R6RS sec. 3.4, sec. 11.7.1).<sup id="cite_ref-r6rs_6-2" class="reference"><a href="#cite_note-r6rs-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> </p><p>Example 1: exact arithmetic in an implementation that supports exact rational complex numbers. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">;; Sum of three rational real numbers and two rational complex numbers</span> <span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="mi">1/3</span><span class="w"> </span><span class="mi">1/4</span><span class="w"> </span><span class="mi">-1/5</span><span class="w"> </span><span class="mi">-1/3i</span><span class="w"> </span><span class="mi">405/50+2/3i</span><span class="p">))</span> <span class="nv">x</span> <span class="nv">===></span><span class="w"> </span><span class="mi">509/60+1/3i</span> <span class="c1">;; Check for exactness.</span> <span class="p">(</span><span class="nb">exact?</span><span class="w"> </span><span class="nv">x</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="no">#t</span> </pre></div> <p>Example 2: Same arithmetic in an implementation that supports neither exact rational numbers nor complex numbers but does accept real numbers in rational notation. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">;; Sum of four rational real numbers</span> <span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="nv">xr</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="mi">1/3</span><span class="w"> </span><span class="mi">1/4</span><span class="w"> </span><span class="mi">-1/5</span><span class="w"> </span><span class="mi">405/50</span><span class="p">))</span> <span class="c1">;; Sum of two rational real numbers</span> <span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="nv">xi</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="mi">-1/3</span><span class="w"> </span><span class="mi">2/3</span><span class="p">))</span> <span class="nv">xr</span> <span class="nv">===></span><span class="w"> </span><span class="mf">8.48333333333333</span> <span class="nv">xi</span> <span class="nv">===></span><span class="w"> </span><span class="mf">0.333333333333333</span> <span class="c1">;; Check for exactness.</span> <span class="p">(</span><span class="nb">exact?</span><span class="w"> </span><span class="nv">xr</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="no">#f</span> <span class="p">(</span><span class="nb">exact?</span><span class="w"> </span><span class="nv">xi</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="no">#f</span> </pre></div> <p>Both implementations conform to the R5RS standard but the second does not conform to R6RS because it does not implement the full numerical tower. </p> <div class="mw-heading mw-heading3"><h3 id="Delayed_evaluation">Delayed evaluation</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=15" title="Edit section: Delayed evaluation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">See also: <a href="/wiki/Lazy_evaluation" title="Lazy evaluation">Lazy evaluation</a></div> <p>Scheme supports delayed evaluation through the <code>delay</code> form and the procedure <code>force</code>. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="nv">a</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span> <span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="nv">eval-aplus2</span><span class="w"> </span><span class="p">(</span><span class="k">delay</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="nv">a</span><span class="w"> </span><span class="mi">2</span><span class="p">)))</span> <span class="p">(</span><span class="k">set!</span><span class="w"> </span><span class="nv">a</span><span class="w"> </span><span class="mi">20</span><span class="p">)</span> <span class="p">(</span><span class="nb">force</span><span class="w"> </span><span class="nv">eval-aplus2</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="mi">22</span> <span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="nv">eval-aplus50</span><span class="w"> </span><span class="p">(</span><span class="k">delay</span><span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="nv">a</span><span class="w"> </span><span class="mi">50</span><span class="p">)))</span> <span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">a</span><span class="w"> </span><span class="mi">8</span><span class="p">))</span> <span class="w"> </span><span class="p">(</span><span class="nb">force</span><span class="w"> </span><span class="nv">eval-aplus50</span><span class="p">))</span> <span class="nv">===></span><span class="w"> </span><span class="mi">70</span> <span class="p">(</span><span class="k">set!</span><span class="w"> </span><span class="nv">a</span><span class="w"> </span><span class="mi">100</span><span class="p">)</span> <span class="p">(</span><span class="nb">force</span><span class="w"> </span><span class="nv">eval-aplus2</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="mi">22</span> </pre></div> <p>The lexical context of the original definition of the promise is preserved, and its value is also preserved after the first use of <code>force</code>. The promise is only ever evaluated once. </p><p>These primitives, which produce or handle values known as <a href="/wiki/Futures_and_promises" title="Futures and promises">promises</a>, can be used to implement advanced <a href="/wiki/Lazy_evaluation" title="Lazy evaluation">lazy evaluation</a> constructs such as <a href="/wiki/Stream_(computing)" title="Stream (computing)">streams</a>.<sup id="cite_ref-srfi-41_24-0" class="reference"><a href="#cite_note-srfi-41-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> </p><p>In the R6RS standard, these are no longer primitives, but instead, are provided as part of the R5RS compatibility library (rnrs r5rs (6)). </p><p>In R5RS, a suggested implementation of <code>delay</code> and <code>force</code> is given, implementing the promise as a procedure with no arguments (a <a href="/wiki/Thunk" title="Thunk">thunk</a>) and using <a href="/wiki/Memoization" title="Memoization">memoization</a> to ensure that it is only ever evaluated once, irrespective of the number of times <code>force</code> is called (R5RS sec. 6.4).<sup id="cite_ref-r5rs_4-6" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> </p><p>SRFI 41 enables the expression of both finite and infinite sequences with extraordinary economy. For example, this is a definition of the <a href="/wiki/Fibonacci_sequence" title="Fibonacci sequence">Fibonacci sequence</a> using the functions defined in SRFI 41:<sup id="cite_ref-srfi-41_24-1" class="reference"><a href="#cite_note-srfi-41-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">;; Define the Fibonacci sequence:</span> <span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="nv">fibs</span> <span class="w"> </span><span class="p">(</span><span class="nf">stream-cons</span><span class="w"> </span><span class="mi">0</span> <span class="w"> </span><span class="p">(</span><span class="nf">stream-cons</span><span class="w"> </span><span class="mi">1</span> <span class="w"> </span><span class="p">(</span><span class="nf">stream-map</span><span class="w"> </span><span class="nb">+</span> <span class="w"> </span><span class="nv">fibs</span> <span class="w"> </span><span class="p">(</span><span class="nf">stream-cdr</span><span class="w"> </span><span class="nv">fibs</span><span class="p">)))))</span> <span class="c1">;; Compute the hundredth number in the sequence:</span> <span class="p">(</span><span class="nf">stream-ref</span><span class="w"> </span><span class="nv">fibs</span><span class="w"> </span><span class="mi">99</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="mi">218922995834555169026</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Order_of_evaluation_of_procedure_arguments">Order of evaluation of procedure arguments</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=16" title="Edit section: Order of evaluation of procedure arguments"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Most Lisps specify an order of evaluation for procedure arguments. Scheme does not. Order of evaluation—including the order in which the expression in the operator position is evaluated—may be chosen by an implementation on a call-by-call basis, and the only constraint is that "the effect of any concurrent evaluation of the operator and operand expressions is constrained to be consistent with some sequential order of evaluation." (R5RS sec. 4.1.3)<sup id="cite_ref-r5rs_4-7" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">ev</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="p">(</span><span class="nf">n</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">display</span><span class="w"> </span><span class="s">"Evaluating "</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="nb">display</span><span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nb">procedure?</span><span class="w"> </span><span class="nv">n</span><span class="p">)</span><span class="w"> </span><span class="s">"procedure"</span><span class="w"> </span><span class="nv">n</span><span class="p">))</span> <span class="w"> </span><span class="p">(</span><span class="nb">newline</span><span class="p">)</span><span class="w"> </span><span class="nv">n</span><span class="p">)))</span> <span class="w"> </span><span class="p">((</span><span class="nf">ev</span><span class="w"> </span><span class="nb">+</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nf">ev</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nf">ev</span><span class="w"> </span><span class="mi">2</span><span class="p">)))</span> <span class="nv">===></span><span class="w"> </span><span class="mi">3</span> </pre></div> <div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span></span><span class="go">Evaluating 1</span> <span class="go">Evaluating 2</span> <span class="go">Evaluating procedure</span> </pre></div> <p>ev is a procedure that describes the argument passed to it, then returns the value of the argument. In contrast with other Lisps, the appearance of an expression in the operator position (the first item) of a Scheme expression is quite legal, as long as the result of the expression in the operator position is a procedure. </p><p>In calling the procedure "<style data-mw-deduplicate="TemplateStyles:r886049734">.mw-parser-output .monospaced{font-family:monospace,monospace}</style><span class="monospaced">+</span>" to add 1 and 2, the expressions <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">(ev +), (ev 1)</span> and <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">(ev 2)</span> may be evaluated in any order, as long as the effect is not as if they were evaluated in parallel. Thus the following three lines may be displayed in any order by standard Scheme when the above example code is executed, although the text of one line may not be interleaved with another because that would violate the sequential evaluation constraint. </p> <div class="mw-heading mw-heading3"><h3 id="Hygienic_macros">Hygienic macros</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=17" title="Edit section: Hygienic macros"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Hygienic_macro" title="Hygienic macro">Hygienic macro</a></div> <p>In the R5RS standard and also in later reports, the syntax of Scheme can easily be extended via the macro system. The R5RS standard introduced a powerful hygienic macro system that allows the programmer to add new syntactic constructs to the language using a simple <a href="/wiki/Pattern_matching" title="Pattern matching">pattern matching</a> sublanguage (R5RS sec 4.3).<sup id="cite_ref-r5rs_4-8" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Prior to this, the hygienic macro system had been relegated to an appendix of the R4RS standard, as a "high level" system alongside a "low level" macro system, both of which were treated as extensions to Scheme rather than an essential part of the language.<sup id="cite_ref-r4rs_25-0" class="reference"><a href="#cite_note-r4rs-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> </p><p>Implementations of the hygienic macro system, also called <code>syntax-rules</code>, are required to respect the lexical scoping of the rest of the language. This is assured by special naming and scoping rules for macro expansion and avoids common programming errors that can occur in the macro systems of other programming languages. R6RS specifies a more sophisticated transformation system, <code>syntax-case</code>, which has been available as a language extension to R5RS Scheme for some time. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">;; Define a macro to implement a variant of "if" with a multi-expression</span> <span class="c1">;; true branch and no false branch.</span> <span class="p">(</span><span class="k">define-syntax</span><span class="w"> </span><span class="k">when</span> <span class="w"> </span><span class="p">(</span><span class="k">syntax-rules</span><span class="w"> </span><span class="p">()</span> <span class="w"> </span><span class="p">((</span><span class="k">when</span><span class="w"> </span><span class="nv">pred</span><span class="w"> </span><span class="nb">exp</span><span class="w"> </span><span class="nv">exps</span><span class="w"> </span><span class="o">...</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="nv">pred</span><span class="w"> </span><span class="p">(</span><span class="k">begin</span><span class="w"> </span><span class="nb">exp</span><span class="w"> </span><span class="nv">exps</span><span class="w"> </span><span class="o">...</span><span class="p">)))))</span> </pre></div> <p>Invocations of macros and procedures bear a close resemblance—both are s-expressions—but they are treated differently. When the compiler encounters an s-expression in the program, it first checks to see if the symbol is defined as a syntactic keyword within the current lexical scope. If so, it then attempts to expand the macro, treating the items in the tail of the s-expression as arguments without compiling code to evaluate them, and this process is repeated recursively until no macro invocations remain. If it is not a syntactic keyword, the compiler compiles code to evaluate the arguments in the tail of the s-expression and then to evaluate the variable represented by the symbol at the head of the s-expression and call it as a procedure with the evaluated tail expressions passed as arguments to it. </p><p>Most Scheme implementations also provide additional macro systems. Among popular ones are <a href="/wiki/Hygienic_macro#syntactic_closures" title="Hygienic macro">syntactic closures</a>, <a href="/wiki/Hygienic_macro#explicit_renaming" title="Hygienic macro">explicit renaming macros</a> and <code>define-macro</code>, a non-hygienic macro system similar to <code>defmacro</code> system provided in <a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a>. </p><p>The inability to specify whether or not a macro is hygienic is one of the shortcomings of the macro system. Alternative models for expansion such as scope sets provide a potential solution.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Environments_and_eval">Environments and eval</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=18" title="Edit section: Environments and eval"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Prior to R5RS, Scheme had no standard equivalent of the <code>eval</code> procedure which is ubiquitous in other Lisps, although the first Lambda Paper had described <code>evaluate</code> as "similar to the LISP function EVAL"<sup id="cite_ref-lambda_paper_1_18-1" class="reference"><a href="#cite_note-lambda_paper_1-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> and the first Revised Report in 1978 replaced this with <code>enclose</code>, which took two arguments. The second, third and fourth revised reports omitted any equivalent of <code>eval</code>. </p><p>The reason for this confusion is that in Scheme with its lexical scoping the result of evaluating an expression depends on where it is evaluated. For instance, it is not clear whether the result of evaluating the following expression should be 5 or 6:<sup id="cite_ref-rees_1992_27-0" class="reference"><a href="#cite_note-rees_1992-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">name</span><span class="w"> </span><span class="ss">'+</span><span class="p">))</span> <span class="w"> </span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nb">+</span><span class="w"> </span><span class="nb">*</span><span class="p">))</span> <span class="w"> </span><span class="p">(</span><span class="nf">evaluate</span><span class="w"> </span><span class="p">(</span><span class="nb">list</span><span class="w"> </span><span class="nv">name</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="p">))))</span> </pre></div> <p>If it is evaluated in the outer environment, where <code>name</code> is defined, the result is the sum of the operands. If it is evaluated in the inner environment, where the symbol "+" has been bound to the value of the procedure "*", the result is the product of the two operands. </p><p>R5RS resolves this confusion by specifying three procedures that return environments and providing a procedure <code>eval</code> that takes an s-expression and an environment and evaluates the expression in the environment provided. (R5RS sec. 6.5)<sup id="cite_ref-r5rs_4-9" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> R6RS extends this by providing a procedure called <code>environment</code> by which the programmer can specify exactly which objects to import into the evaluation environment. </p><p>With modern scheme (usually compatible with R5RS) to evaluate this expression, one needs to define a function <code>evaluate</code> which can look like this: </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="p">(</span><span class="nf">evaluate</span><span class="w"> </span><span class="nv">expr</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="nb">eval</span><span class="w"> </span><span class="nv">expr</span><span class="w"> </span><span class="p">(</span><span class="nb">interaction-environment</span><span class="p">)))</span> </pre></div> <p><code>interaction-environment</code> is the interpreter's global environment. </p> <div class="mw-heading mw-heading3"><h3 id="Treatment_of_non-Boolean_values_in_Boolean_expressions">Treatment of non-Boolean values in Boolean expressions</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=19" title="Edit section: Treatment of non-Boolean values in Boolean expressions"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In most dialects of Lisp including Common Lisp, by convention the value <code>NIL</code> evaluates to the value false in a Boolean expression. In Scheme, since the IEEE standard in 1991,<sup id="cite_ref-ieee1178_3-1" class="reference"><a href="#cite_note-ieee1178-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> all values except <code>#f</code>, including <code>NIL</code>'s equivalent in Scheme which is written as <code>'()</code>, evaluate to the value true in a Boolean expression. (R5RS sec. 6.3.1)<sup id="cite_ref-r5rs_4-10" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> </p><p>Where the constant representing the Boolean value of true is <code>T</code> in most Lisps, in Scheme it is <code>#t</code>. </p> <div class="mw-heading mw-heading3"><h3 id="Disjointness_of_primitive_datatypes">Disjointness of primitive datatypes</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=20" title="Edit section: Disjointness of primitive datatypes"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In Scheme the primitive datatypes are disjoint. Only one of the following predicates can be true of any Scheme object: <code>boolean?</code>, <code>pair?</code>, <code>symbol?</code>, <code>number?</code>, <code>char?</code>, <code>string?</code>, <code>vector?</code>, <code>port?</code>, <code>procedure?</code>. (R5RS sec 3.2)<sup id="cite_ref-r5rs_4-11" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> </p><p>Within the numerical datatype, by contrast, the numerical values overlap. For example, an integer value satisfies all of the <code>integer?</code>, <code>rational?</code>, <code>real?</code>, <code>complex?</code> and <code>number?</code> predicates at the same time. (R5RS sec 6.2)<sup id="cite_ref-r5rs_4-12" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Equivalence_predicates">Equivalence predicates</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=21" title="Edit section: Equivalence predicates"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">See also: <a href="/wiki/Relational_operator" title="Relational operator">relational operator</a></div> <p>Scheme has three different types of equivalence between arbitrary objects denoted by three different <i>equivalence predicates</i>, relational operators for testing equality, <code>eq?</code>, <code>eqv?</code> and <code>equal?</code>: </p> <ul><li><code>eq?</code> evaluates to <code>#f</code> unless its parameters represent the same data object in memory;</li> <li><code>eqv?</code> is generally the same as <code>eq?</code> but treats primitive objects (e.g. characters and numbers) specially so that numbers that represent the same value are <code>eqv?</code> even if they do not refer to the same object;</li> <li><code>equal?</code> compares data structures such as lists, vectors and strings to determine if they have congruent structure and <code>eqv?</code> contents.(R5RS sec. 6.1)<sup id="cite_ref-r5rs_4-13" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup></li></ul> <p>Type dependent equivalence operations also exist in Scheme: <code>string=?</code> and <code>string-ci=?</code> compare two strings (the latter performs a case-independent comparison); <code>char=?</code> and <code>char-ci=?</code> compare characters; <code>=</code> compares numbers.<sup id="cite_ref-r5rs_4-14" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Comments">Comments</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=22" title="Edit section: Comments"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">See also: <a href="/wiki/Comment_(computer_programming)" title="Comment (computer programming)">Comment (computer programming)</a></div> <p>Up to the R5RS standard, the standard comment in Scheme was a semicolon, which makes the rest of the line invisible to Scheme. Numerous implementations have supported alternative conventions permitting comments to extend for more than a single line, and the R6RS standard permits two of them: an entire <a href="/wiki/S-expression" title="S-expression">s-expression</a> may be turned into a comment (or "commented out") by preceding it with <code>#;</code> (introduced in SRFI 62<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup>) and a multiline comment or "block comment" may be produced by surrounding text with <code>#|</code> and <code>|#</code>. </p> <div class="mw-heading mw-heading3"><h3 id="Input/output"><span id="Input.2Foutput"></span>Input/output</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=23" title="Edit section: Input/output"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Scheme's input and output is based on the <i>port</i> datatype. (R5RS sec 6.6)<sup id="cite_ref-r5rs_4-15" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> R5RS defines two default ports, accessible with the procedures <code>current-input-port</code> and <code>current-output-port</code>, which correspond to the Unix notions of <a href="/wiki/Standard_streams" title="Standard streams">standard input and standard output</a>. Most implementations also provide <code>current-error-port</code>. <a href="/wiki/Redirection_(computing)" title="Redirection (computing)">Redirection</a> of input and standard output is supported in the standard, by standard procedures such as <code>with-input-from-file</code> and <code>with-output-to-file</code>. Most implementations provide string ports with similar redirection capabilities, enabling many normal input-output operations to be performed on string buffers instead of files, using procedures described in SRFI 6.<sup id="cite_ref-srfi-6_29-0" class="reference"><a href="#cite_note-srfi-6-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup> The R6RS standard specifies much more sophisticated and capable port procedures and many new types of port. </p><p>The following examples are written in strict R5RS Scheme. </p><p>Example 1: With output defaulting to (current-output-port): </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">hello0</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="p">()</span><span class="w"> </span><span class="p">(</span><span class="nb">display</span><span class="w"> </span><span class="s">"Hello world"</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">newline</span><span class="p">))))</span> <span class="w"> </span><span class="p">(</span><span class="nf">hello0</span><span class="p">))</span> </pre></div> <p>Example 2: As 1, but using optional port argument to output procedures </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">hello1</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">p</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">display</span><span class="w"> </span><span class="s">"Hello world"</span><span class="w"> </span><span class="nv">p</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">newline</span><span class="w"> </span><span class="nv">p</span><span class="p">))))</span> <span class="w"> </span><span class="p">(</span><span class="nf">hello1</span><span class="w"> </span><span class="p">(</span><span class="nb">current-output-port</span><span class="p">)))</span> </pre></div> <p>Example 3: As 1, but output is redirected to a newly created file </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">;; NB: with-output-to-file is an optional procedure in R5RS</span> <span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">hello0</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">(</span><span class="nb">display</span><span class="w"> </span><span class="s">"Hello world"</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">newline</span><span class="p">))))</span> <span class="w"> </span><span class="p">(</span><span class="nb">with-output-to-file</span><span class="w"> </span><span class="s">"helloworldoutputfile"</span><span class="w"> </span><span class="nv">hello0</span><span class="p">))</span> </pre></div> <p>Example 4: As 2, but with explicit file open and port close to send output to file </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">hello1</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">p</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">display</span><span class="w"> </span><span class="s">"Hello world"</span><span class="w"> </span><span class="nv">p</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">newline</span><span class="w"> </span><span class="nv">p</span><span class="p">)))</span> <span class="w"> </span><span class="p">(</span><span class="nf">output-port</span><span class="w"> </span><span class="p">(</span><span class="nb">open-output-file</span><span class="w"> </span><span class="s">"helloworldoutputfile"</span><span class="p">)))</span> <span class="w"> </span><span class="p">(</span><span class="nf">hello1</span><span class="w"> </span><span class="nv">output-port</span><span class="p">)</span> <span class="w"> </span><span class="p">(</span><span class="nb">close-output-port</span><span class="w"> </span><span class="nv">output-port</span><span class="p">))</span> </pre></div> <p>Example 5: As 2, but with using call-with-output-file to send output to a file. </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">hello1</span><span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nf">p</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">display</span><span class="w"> </span><span class="s">"Hello world"</span><span class="w"> </span><span class="nv">p</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">newline</span><span class="w"> </span><span class="nv">p</span><span class="p">))))</span> <span class="w"> </span><span class="p">(</span><span class="nb">call-with-output-file</span><span class="w"> </span><span class="s">"helloworldoutputfile"</span><span class="w"> </span><span class="nv">hello1</span><span class="p">))</span> </pre></div> <p>Similar procedures are provided for input. R5RS Scheme provides the predicates <code>input-port?</code> and <code>output-port?</code>. For character input and output, <code>write-char</code>, <code>read-char</code>, <code>peek-char</code> and <code>char-ready?</code> are provided. For writing and reading Scheme expressions, Scheme provides <code>read</code> and <code>write</code>. On a read operation, the result returned is the end-of-file object if the input port has reached the end of the file, and this can be tested using the predicate <code>eof-object?</code>. </p><p>With the standard, SRFI 28 also defines a basic formatting procedure resembling Common Lisp's <code>format</code> function, after which it is named.<sup id="cite_ref-srfi-28_30-0" class="reference"><a href="#cite_note-srfi-28-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Redefinition_of_standard_procedures">Redefinition of standard procedures</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=24" title="Edit section: Redefinition of standard procedures"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In Scheme, procedures are bound to variables. At R5RS the language standard formally mandated that programs may change the variable bindings of built-in procedures, effectively redefining them. (R5RS "Language changes")<sup id="cite_ref-r5rs_4-16" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> For example, <code>+</code> can be extended to accept strings as well as numbers by redefining it: </p> <div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="k">set!</span><span class="w"> </span><span class="nb">+</span> <span class="w"> </span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nf">original+</span><span class="w"> </span><span class="nb">+</span><span class="p">))</span> <span class="w"> </span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="nv">args</span> <span class="w"> </span><span class="p">(</span><span class="nb">apply</span><span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="k">or</span><span class="w"> </span><span class="p">(</span><span class="nb">null?</span><span class="w"> </span><span class="nv">args</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">string?</span><span class="w"> </span><span class="p">(</span><span class="nb">car</span><span class="w"> </span><span class="nv">args</span><span class="p">)))</span> <span class="w"> </span><span class="nb">string-append</span> <span class="w"> </span><span class="nv">original+</span><span class="p">)</span> <span class="w"> </span><span class="nv">args</span><span class="p">))))</span> <span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="mi">6</span> <span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="s">"1"</span><span class="w"> </span><span class="s">"2"</span><span class="w"> </span><span class="s">"3"</span><span class="p">)</span> <span class="nv">===></span><span class="w"> </span><span class="s">"123"</span> </pre></div> <p>In R6RS every binding, including the standard ones, belongs to some library, and all exported bindings are immutable. (R6RS sec 7.1)<sup id="cite_ref-r6rs_6-3" class="reference"><a href="#cite_note-r6rs-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> Because of this, redefinition of standard procedures by mutation is forbidden. Instead, it is possible to import a different procedure under the name of a standard one, which in effect is similar to redefinition. </p> <div class="mw-heading mw-heading3"><h3 id="Nomenclature_and_naming_conventions">Nomenclature and naming conventions</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=25" title="Edit section: Nomenclature and naming conventions"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In Standard Scheme, procedures that convert from one datatype to another contain the character string "->" in their name, predicates end with a "?", and procedures that change the value of already-allocated data end with a "!". These conventions are often followed by Scheme programmers. </p><p>In formal contexts such as Scheme standards, the word "procedure" is used in preference to "function" to refer to a lambda expression or primitive procedure. In normal usage, the words "procedure" and "function" are used interchangeably. Procedure application is sometimes referred to formally as <i>combination</i>. </p><p>As in other Lisps, the term "<a href="/wiki/Thunk" title="Thunk">thunk</a>" is used in Scheme to refer to a procedure with no arguments. The term "proper tail recursion" refers to the property of all Scheme implementations, that they perform tail-call optimization so as to support an indefinite number of active <a href="/wiki/Tail_call" title="Tail call">tail calls</a>. </p><p>The form of the titles of the standards documents since R3RS, "Revised<sup>n</sup> Report on the Algorithmic Language Scheme", is a reference to the title of the <a href="/wiki/ALGOL" title="ALGOL">ALGOL 60</a> standard document, "Revised Report on the Algorithmic Language Algol 60," The Summary page of R3RS is closely modeled on the Summary page of the ALGOL 60 Report.<sup id="cite_ref-algol_report_31-0" class="reference"><a href="#cite_note-algol_report-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-r3rs_32-0" class="reference"><a href="#cite_note-r3rs-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Review_of_standard_forms_and_procedures">Review of standard forms and procedures</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=26" title="Edit section: Review of standard forms and procedures"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The language is formally defined in the standards R5RS (1998)<sup id="cite_ref-r5rs_4-17" class="reference"><a href="#cite_note-r5rs-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> and R6RS (2007).<sup id="cite_ref-r6rs_6-4" class="reference"><a href="#cite_note-r6rs-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> They describe standard "forms": keywords and accompanying syntax, which provide the control structure of the language, and standard procedures which perform common tasks. </p> <div class="mw-heading mw-heading3"><h3 id="Standard_forms">Standard forms</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=27" title="Edit section: Standard forms"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>This table describes the standard forms in Scheme. Some forms appear in more than one row because they cannot easily be classified into a single function in the language. </p><p>Forms marked "L" in this table are classed as derived "library" forms in the standard and are often implemented as macros using more fundamental forms in practice, making the task of implementation much easier than in other languages. </p> <table class="wikitable"> <caption>Standard forms in the language R5RS Scheme </caption> <tbody><tr> <th>Purpose</th> <th>Forms </th></tr> <tr> <td>Definition</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">define</span> </td></tr> <tr> <td>Binding constructs</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">lambda, do (L), let (L), let* (L), letrec (L)</span> </td></tr> <tr> <td>Conditional evaluation</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">if, cond (L), case (L), and (L), or (L)</span> </td></tr> <tr> <td>Sequential evaluation</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">begin (*)</span> </td></tr> <tr> <td>Iteration</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">lambda, do (L), named let (L)</span> </td></tr> <tr> <td>Syntactic extension</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">define-syntax, let-syntax, letrec-syntax, syntax-rules (R5RS), syntax-case (R6RS)</span> </td></tr> <tr> <td>Quoting</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">quote('), unquote(,), quasiquote(`), unquote-splicing(,@)</span> </td></tr> <tr> <td>Assignment</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">set!</span> </td></tr> <tr> <td>Delayed evaluation</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">delay (L)</span> </td></tr></tbody></table> <p>While <code>begin</code> is defined as a library syntax in R5RS, the expander must know about it to achieve the splicing function. In R6RS it is no longer a library syntax. </p> <div class="mw-heading mw-heading3"><h3 id="Standard_procedures">Standard procedures</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=28" title="Edit section: Standard procedures"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The following two tables describe the standard procedures in R5RS Scheme. R6RS is far more extensive and a summary of this type would not be practical. </p><p>Some procedures appear in more than one row because they cannot easily be classified into a single function in the language. </p> <table class="wikitable"> <caption>Standard procedures in the language R5RS Scheme </caption> <tbody><tr> <th>Purpose</th> <th>Procedures </th></tr> <tr> <td>Construction</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">vector, make-vector, make-string, list</span> </td></tr> <tr> <td>Equivalence predicates</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">eq?, eqv?, equal?, string=?, string-ci=?, char=?, char-ci=?</span> </td></tr> <tr> <td><a href="/wiki/Type_conversion" title="Type conversion">Type conversion</a></td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">vector->list, list->vector, number->string, string->number, symbol->string, string->symbol, char->integer, integer->char, string->list, list->string</span> </td></tr> <tr> <td>Numbers</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced"><i>See separate table</i></span> </td></tr> <tr> <td>Strings</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">string?, make-string, string, string-length, string-ref, string-set!, string=?, string-ci=?, string<? string-ci<?, string<=? string-ci<=?, string>? string-ci>?, string>=? string-ci>=?, substring, string-append, string->list, list->string, string-copy, string-fill!</span> </td></tr> <tr> <td>Characters</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">char?, char=?, char-ci=?, char<? char-ci<?, char<=? char-ci<=?, char>? char-ci>?, char>=? char-ci>=?, char-alphabetic?, char-numeric?, char-whitespace?, char-upper-case?, char-lower-case?, char->integer, integer->char, char-upcase, char-downcase</span> </td></tr> <tr> <td>Vectors</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">make-vector, vector, vector?, vector-length, vector-ref, vector-set!, vector->list, list->vector, vector-fill!</span> </td></tr> <tr> <td>Symbols</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">symbol->string, string->symbol, symbol?</span> </td></tr> <tr> <td>Pairs and lists</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">pair?, cons, car, cdr, set-car!, set-cdr!, null?, list?, list, length, append, reverse, list-tail, list-ref, memq. memv. member, assq, assv, assoc, list->vector, vector->list, list->string, string->list</span> </td></tr> <tr> <td>Identity predicates</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">boolean?, pair?, symbol?, number?, char?, string?, vector?, port?, procedure?</span> </td></tr> <tr> <td>Continuations</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">call-with-current-continuation (call/cc), values, call-with-values, dynamic-wind</span> </td></tr> <tr> <td>Environments</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">eval, scheme-report-environment, null-environment, interaction-environment (optional)</span> </td></tr> <tr> <td>Input/output</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">display, newline, read, write, read-char, write-char, peek-char, char-ready?, eof-object? open-input-file, open-output-file, close-input-port, close-output-port, input-port?, output-port?, current-input-port, current-output-port, call-with-input-file, call-with-output-file, with-input-from-file(optional), with-output-to-file(optional)</span> </td></tr> <tr> <td>System interface</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">load (optional), transcript-on (optional), transcript-off (optional)</span> </td></tr> <tr> <td>Delayed evaluation</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">force</span> </td></tr> <tr> <td>Functional programming</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">procedure?, apply, map, for-each</span> </td></tr> <tr> <td>Booleans</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">boolean? not</span> </td></tr></tbody></table> <p>String and character procedures that contain "-ci" in their names perform case-independent comparisons between their arguments: upper case and lower case versions of the same character are taken to be equal. </p> <table class="wikitable"> <caption>Standard numeric procedures in the language R5RS Scheme </caption> <tbody><tr> <th>Purpose</th> <th>Procedures </th></tr> <tr> <td>Basic arithmetic operators</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">+, -, *, /, abs, quotient, remainder, modulo, gcd, lcm, expt, sqrt</span> </td></tr> <tr> <td>Rational numbers</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">numerator, denominator, rational?, rationalize</span> </td></tr> <tr> <td>Approximation</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">floor, ceiling, truncate, round</span> </td></tr> <tr> <td>Exactness</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">inexact->exact, exact->inexact, exact?, inexact?</span> </td></tr> <tr> <td>Inequalities</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced"><, <= , >, >=, =</span> </td></tr> <tr> <td>Miscellaneous predicates</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">zero?, negative?, positive? odd? even?</span> </td></tr> <tr> <td>Maximum and minimum</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">max, min</span> </td></tr> <tr> <td>Trigonometry</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">sin, cos, tan, asin, acos, atan</span> </td></tr> <tr> <td>Exponentials</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">exp, log</span> </td></tr> <tr> <td>Complex numbers</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">make-rectangular, make-polar, real-part, imag-part, magnitude, angle, complex?</span> </td></tr> <tr> <td>Input-output</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">number->string, string->number</span> </td></tr> <tr> <td>Type predicates</td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">integer?, rational?, real?, complex?, number?</span> </td></tr></tbody></table> <p>Implementations of - and / that take more than two arguments are defined but left optional at R5RS. </p> <div class="mw-heading mw-heading2"><h2 id="Scheme_Requests_for_Implementation">Scheme Requests for Implementation</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=29" title="Edit section: Scheme Requests for Implementation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Scheme_Requests_for_Implementation" title="Scheme Requests for Implementation">Scheme Requests for Implementation</a></div> <p>Because of Scheme's minimalism, many common procedures and syntactic forms are not defined by the standard. In order to keep the core language small but facilitate standardization of extensions, the Scheme community has a "Scheme Request for Implementation" (SRFI) process by which extension libraries are defined through careful discussion of extension proposals. This promotes code portability. Many of the SRFIs are supported by all or most Scheme implementations. </p><p>SRFIs with fairly wide support in different implementations include:<sup id="cite_ref-srfi_support_33-0" class="reference"><a href="#cite_note-srfi_support-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup> </p> <ul><li>0: feature-based conditional expansion construct</li> <li>1: list library</li> <li>4: homogeneous numeric vector datatypes</li> <li>6: basic string ports</li> <li>8: receive, binding to multiple values</li> <li>9: defining record types</li> <li>13: string library</li> <li>14: character-set library</li> <li>16: syntax for procedures of variable <a href="/wiki/Arity" title="Arity">arity</a></li> <li>17: generalized set!</li> <li>18: Multithreading support</li> <li>19: time data types and procedures</li> <li>25: multi-dimensional array primitives</li> <li>26: notation for specializing parameters without <a href="/wiki/Currying" title="Currying">currying</a></li> <li>27: sources of random bits</li> <li>28: basic format strings</li> <li>29: <a href="/wiki/Internationalization_and_localization" title="Internationalization and localization">localization</a></li> <li>30: nested multi-line comments</li> <li>31: a special form for recursive evaluation</li> <li>37: args-fold: a program argument processor</li> <li>39: parameter objects</li> <li>41: <a href="/wiki/Stream_(computing)" title="Stream (computing)">streams</a></li> <li>42: <a href="/wiki/List_comprehension" title="List comprehension">eager comprehensions</a></li> <li>43: vector library</li> <li>45: primitives for expressing iterative lazy algorithms</li> <li>60: integers as bits</li> <li>61: a more general cond clause</li> <li>66: octet vectors</li> <li>67: compare procedures</li></ul> <div class="mw-heading mw-heading2"><h2 id="Implementations">Implementations</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=30" title="Edit section: Implementations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main category: <a href="/wiki/Category:Scheme_(programming_language)_implementations" title="Category:Scheme (programming language) implementations">Scheme (programming language) implementations</a></div> <p>The elegant, minimalist design has made Scheme a popular target for language designers, hobbyists, and educators, and because of its small size, that of a typical <a href="/wiki/Interpreter_(computing)" title="Interpreter (computing)">interpreter</a>, it is also a popular choice for <a href="/wiki/Embedded_system" title="Embedded system">embedded systems</a> and <a href="/wiki/Scripting_language" title="Scripting language">scripting</a>. This has resulted in scores of implementations,<sup id="cite_ref-scheme_implementations_34-0" class="reference"><a href="#cite_note-scheme_implementations-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup> most of which differ from each other so much that porting programs from one implementation to another is quite difficult, and the small size of the standard language means that writing a useful program of any great complexity in standard, portable Scheme is almost impossible.<sup id="cite_ref-position_paper_14-1" class="reference"><a href="#cite_note-position_paper-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> The R6RS standard specifies a much broader language, in an attempt to broaden its appeal to programmers. </p><p>Almost all implementations provide a traditional Lisp-style <a href="/wiki/Read%E2%80%93eval%E2%80%93print_loop" title="Read–eval–print loop">read–eval–print loop</a> for development and debugging. Many also <a href="/wiki/Compiler" title="Compiler">compile</a> Scheme programs to executable binary. Support for embedding Scheme code in programs written in other languages is also common, as the relative simplicity of Scheme implementations makes it a popular choice for adding scripting capabilities to larger systems developed in languages such as <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a>. The <a href="/wiki/Gambit_(Scheme_implementation)" title="Gambit (Scheme implementation)">Gambit</a>, <a href="/wiki/Chicken_(Scheme_implementation)" title="Chicken (Scheme implementation)">Chicken</a>, and <a href="/wiki/Bigloo" title="Bigloo">Bigloo</a> Scheme interpreters compile Scheme to C, which makes embedding far easier. Further, Bigloo's compiler can be configured to generate <a href="/wiki/Bytecode" title="Bytecode">bytecode</a> for the <a href="/wiki/Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> (JVM), and has an experimental bytecode generator for <a href="/wiki/.NET" title=".NET">.NET</a>. </p><p>Some implementations support added features. For example, <a href="/wiki/Kawa_(Scheme_implementation)" title="Kawa (Scheme implementation)">Kawa</a> and <a href="/wiki/JScheme" title="JScheme">JScheme</a> provide integration with <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a> classes, and the Scheme to C compilers often make it easy to use external libraries written in C, up to allowing the embedding of C code in the Scheme source code. Another example is Pvts, which offers a set of visual tools that support Scheme learning. </p> <div class="mw-heading mw-heading2"><h2 id="Usage">Usage</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=31" title="Edit section: Usage"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Scheme is widely used by several<sup id="cite_ref-schemers_inc_35-0" class="reference"><a href="#cite_note-schemers_inc-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> schools; in particular, several introductory <a href="/wiki/Computer_science" title="Computer science">computer science</a> courses use Scheme in conjunction with the textbook <i><a href="/wiki/Structure_and_Interpretation_of_Computer_Programs" title="Structure and Interpretation of Computer Programs">Structure and Interpretation of Computer Programs</a></i> (SICP).<sup id="cite_ref-sicp_adopters_36-0" class="reference"><a href="#cite_note-sicp_adopters-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup> For the past 12 years, <a href="/wiki/Racket_(programming_language)" title="Racket (programming language)">PLT</a> has run the <a href="/wiki/ProgramByDesign" title="ProgramByDesign">ProgramByDesign</a> (formerly TeachScheme!) project, which has exposed close to 600 high school teachers and thousands of high school students to rudimentary Scheme programming. <a href="/wiki/MIT" class="mw-redirect" title="MIT">MIT</a>'s old introductory programming class 6.001 was taught in Scheme,<sup id="cite_ref-6.001_37-0" class="reference"><a href="#cite_note-6.001-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup> Although 6.001 has been replaced by more modern courses, SICP continues to be taught at MIT.<sup id="cite_ref-6.001_zombies_38-0" class="reference"><a href="#cite_note-6.001_zombies-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup> Likewise, the introductory class at <a href="/wiki/UC_Berkeley" class="mw-redirect" title="UC Berkeley">UC Berkeley</a>, CS 61A, was until 2011 taught entirely in Scheme, save minor diversions into <a href="/wiki/Logo_(programming_language)" title="Logo (programming language)">Logo</a> to demonstrate dynamic scope. Today, like MIT, Berkeley has replaced the syllabus with a more modern version that is primarily taught in <a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python 3</a>, but the current syllabus is still based on the old curriculum, and parts of the class are still taught in Scheme.<sup id="cite_ref-61A_39-0" class="reference"><a href="#cite_note-61A-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup> </p><p>The textbook <i><a href="/wiki/How_to_Design_Programs" title="How to Design Programs">How to Design Programs</a></i> by Matthias Felleisen, currently at Northeastern University, is used by some institutes of higher education for their introductory computer science courses. Both <a href="/wiki/Northeastern_University" title="Northeastern University">Northeastern University</a> and <a href="/wiki/Worcester_Polytechnic_Institute" title="Worcester Polytechnic Institute">Worcester Polytechnic Institute</a> use Scheme exclusively for their introductory courses Fundamentals of Computer Science (CS2500) and Introduction to Program Design (CS1101), respectively.<sup id="cite_ref-neu_40-0" class="reference"><a href="#cite_note-neu-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-wpi_41-0" class="reference"><a href="#cite_note-wpi-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Rose-Hulman" class="mw-redirect" title="Rose-Hulman">Rose-Hulman</a> uses Scheme in its more advanced Programming Language Concepts course.<sup id="cite_ref-rhit_42-0" class="reference"><a href="#cite_note-rhit-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Brandeis_University" title="Brandeis University">Brandeis University</a>'s core course, Structure and Interpretations of Computer Programs (COSI121b), is also taught exclusively in Scheme by theoretical computer scientist <a href="/wiki/Harry_Mairson" title="Harry Mairson">Harry Mairson</a>.<sup id="cite_ref-brandeis_43-0" class="reference"><a href="#cite_note-brandeis-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Indiana_University" title="Indiana University">Indiana University</a>'s introductory class, C211, is taught entirely in Scheme. A self-paced version of the course, CS 61AS, continues to use Scheme.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup> The introductory computer science courses at <a href="/wiki/Yale" class="mw-redirect" title="Yale">Yale</a> and <a href="/wiki/Grinnell_College" title="Grinnell College">Grinnell College</a> are also taught in Scheme.<sup id="cite_ref-yale_cs201_45-0" class="reference"><a href="#cite_note-yale_cs201-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup> Programming Design Paradigms,<sup id="cite_ref-neu2_46-0" class="reference"><a href="#cite_note-neu2-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup> a mandatory course for the Computer science Graduate Students at <a href="/wiki/Northeastern_University" title="Northeastern University">Northeastern University</a>, also extensively uses Scheme. The former introductory computer science course at the University of Minnesota - Twin Cities, CSCI 1901, also used Scheme as its primary language, followed by a course that introduced students to the Java language;<sup id="cite_ref-umn_47-0" class="reference"><a href="#cite_note-umn-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup> however, following the example of MIT, the department replaced 1901 with the Python-based CSCI 1133,<sup id="cite_ref-umn2_48-0" class="reference"><a href="#cite_note-umn2-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup> while functional programming is covered in detail in the third-semester course CSCI 2041.<sup id="cite_ref-umn3_49-0" class="reference"><a href="#cite_note-umn3-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup> </p><p>Scheme is/was also used for the following: </p> <ul><li>The <a href="/wiki/Document_Style_Semantics_and_Specification_Language" title="Document Style Semantics and Specification Language">Document Style Semantics and Specification Language</a> (DSSSL), which provides a method of specifying <a href="/wiki/SGML" class="mw-redirect" title="SGML">SGML</a> <a href="/wiki/Style_sheet_(web_development)" title="Style sheet (web development)">stylesheets</a>, uses a Scheme subset.<sup id="cite_ref-dsssl_50-0" class="reference"><a href="#cite_note-dsssl-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup></li> <li>The well-known <a href="/wiki/Open-source_software" title="Open-source software">open source</a> <a href="/wiki/Raster_graphics_editor" title="Raster graphics editor">raster graphics editor</a> <a href="/wiki/GIMP" title="GIMP">GIMP</a> uses <a href="/wiki/TinyScheme" title="TinyScheme">TinyScheme</a> as a <a href="/wiki/Scripting_language" title="Scripting language">scripting language</a>.<sup id="cite_ref-gimp_51-0" class="reference"><a href="#cite_note-gimp-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/GNU_Guile" title="GNU Guile">Guile</a> has been adopted by <a href="/wiki/GNU" title="GNU">GNU</a> project as its official scripting language, and that implementation of Scheme is embedded in such applications as <a href="/wiki/GNU_LilyPond" class="mw-redirect" title="GNU LilyPond">GNU LilyPond</a> and <a href="/wiki/GnuCash" title="GnuCash">GnuCash</a> as a scripting language for extensions. Likewise, Guile used to be the scripting language for the <a href="/wiki/Desktop_environment" title="Desktop environment">desktop environment</a> <a href="/wiki/GNOME" title="GNOME">GNOME</a>,<sup id="cite_ref-archive_gnomefaq_52-0" class="reference"><a href="#cite_note-archive_gnomefaq-52"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup> and GNOME still has a project that provides Guile bindings to its library stack.<sup id="cite_ref-live_gnome_53-0" class="reference"><a href="#cite_note-live_gnome-53"><span class="cite-bracket">[</span>53<span class="cite-bracket">]</span></a></sup> There is a project to incorporate Guile into <a href="/wiki/GNU_Emacs" title="GNU Emacs">GNU Emacs</a>, GNU's flagship program, replacing the current <a href="/wiki/Emacs_Lisp" title="Emacs Lisp">Emacs Lisp</a> interpreter.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="Where is the source? (May 2019)">citation needed</span></a></i>]</sup></li> <li><a href="/wiki/Extension_Language_Kit" title="Extension Language Kit">Elk Scheme</a> is used by <a href="/wiki/Synopsys" title="Synopsys">Synopsys</a> as a scripting language for its <a href="/wiki/Technology_CAD" title="Technology CAD">technology CAD (TCAD)</a> tools.<sup id="cite_ref-tcad_54-0" class="reference"><a href="#cite_note-tcad-54"><span class="cite-bracket">[</span>54<span class="cite-bracket">]</span></a></sup></li> <li>Shiro Kawai, senior programmer on the movie <i><a href="/wiki/Final_Fantasy:_The_Spirits_Within" title="Final Fantasy: The Spirits Within">Final Fantasy: The Spirits Within</a></i>, used Scheme as a scripting language for managing the real-time rendering engine.<sup id="cite_ref-shiro_kawai_55-0" class="reference"><a href="#cite_note-shiro_kawai-55"><span class="cite-bracket">[</span>55<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/Google_App_Inventor" class="mw-redirect" title="Google App Inventor">Google App Inventor</a> for <a href="/wiki/Android_(operating_system)" title="Android (operating system)">Android</a> uses Scheme, where <a href="/wiki/Kawa_(Scheme_implementation)" title="Kawa (Scheme implementation)">Kawa</a> is used to compile the Scheme code down to bytecodes for the <a href="/wiki/Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> running on Android devices.<sup id="cite_ref-android_56-0" class="reference"><a href="#cite_note-android-56"><span class="cite-bracket">[</span>56<span class="cite-bracket">]</span></a></sup></li></ul> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=32" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239009302">.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}</style><ul role="navigation" aria-label="Portals" class="noprint portalbox portalborder portalright"> <li class="portalbox-entry"><span class="portalbox-image"><span class="noviewer" typeof="mw:File"><a href="/wiki/File:Octicons-terminal.svg" class="mw-file-description"><img alt="icon" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/24px-Octicons-terminal.svg.png" decoding="async" width="24" height="28" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/37px-Octicons-terminal.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/49px-Octicons-terminal.svg.png 2x" data-file-width="896" data-file-height="1024" /></a></span></span><span class="portalbox-link"><a href="/wiki/Portal:Computer_programming" title="Portal:Computer programming">Computer programming portal</a></span></li></ul> <ul><li><i><a href="/wiki/Essentials_of_Programming_Languages" title="Essentials of Programming Languages">Essentials of Programming Languages</a></i>, textbook using Scheme as foundation</li></ul> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=33" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;"> <ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://doc.rust-lang.org/reference/influences.html">"Influences - The Rust Reference"</a>. <i>The Rust Reference</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2023-04-18</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=The+Rust+Reference&rft.atitle=Influences+-+The+Rust+Reference&rft_id=https%3A%2F%2Fdoc.rust-lang.org%2Freference%2Finfluences.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-cl_steele-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-cl_steele_2-0">^</a></b></span> <span class="reference-text">Common LISP: The Language, 2nd Ed., Guy L. Steele Jr. Digital Press; 1981. <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-1-55558-041-4" title="Special:BookSources/978-1-55558-041-4">978-1-55558-041-4</a>. "Common Lisp is a new dialect of Lisp, a successor to MacLisp, influenced strongly by ZetaLisp and to some extent by Scheme and InterLisp."</span> </li> <li id="cite_note-ieee1178-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-ieee1178_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-ieee1178_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">1178-1990 (Reaff 2008) IEEE Standard for the Scheme Programming Language. IEEE part number STDPD14209, <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100706171338/http://standards.ieee.org/board/rev/308minutes.html">unanimously reaffirmed</a> at a meeting of the IEEE-SA Standards Board Standards Review Committee (RevCom), March 26, 2008 (item 6.3 on minutes), reaffirmation minutes accessed October 2009. This document is available from IEEE for purchase only, and not online at time of writing: 2009.</span> </li> <li id="cite_note-r5rs-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-r5rs_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-r5rs_4-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-r5rs_4-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-r5rs_4-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-r5rs_4-4"><sup><i><b>e</b></i></sup></a> <a href="#cite_ref-r5rs_4-5"><sup><i><b>f</b></i></sup></a> <a href="#cite_ref-r5rs_4-6"><sup><i><b>g</b></i></sup></a> <a href="#cite_ref-r5rs_4-7"><sup><i><b>h</b></i></sup></a> <a href="#cite_ref-r5rs_4-8"><sup><i><b>i</b></i></sup></a> <a href="#cite_ref-r5rs_4-9"><sup><i><b>j</b></i></sup></a> <a href="#cite_ref-r5rs_4-10"><sup><i><b>k</b></i></sup></a> <a href="#cite_ref-r5rs_4-11"><sup><i><b>l</b></i></sup></a> <a href="#cite_ref-r5rs_4-12"><sup><i><b>m</b></i></sup></a> <a href="#cite_ref-r5rs_4-13"><sup><i><b>n</b></i></sup></a> <a href="#cite_ref-r5rs_4-14"><sup><i><b>o</b></i></sup></a> <a href="#cite_ref-r5rs_4-15"><sup><i><b>p</b></i></sup></a> <a href="#cite_ref-r5rs_4-16"><sup><i><b>q</b></i></sup></a> <a href="#cite_ref-r5rs_4-17"><sup><i><b>r</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRichard_KelseyWilliam_ClingerJonathan_ReesRozas1998" class="citation journal cs1">Richard Kelsey; William Clinger; Jonathan Rees; et al. (August 1998). <a rel="nofollow" class="external text" href="http://www.schemers.org/Documents/Standards/R5RS/">"Revised<sup>5</sup> Report on the Algorithmic Language Scheme"</a>. <i>Higher-Order and Symbolic Computation</i>. <b>11</b> (1): 7–105. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1023%2FA%3A1010051815785">10.1023/A:1010051815785</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14069423">14069423</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Higher-Order+and+Symbolic+Computation&rft.atitle=Revised%3Csup%3E5%3C%2Fsup%3E+Report+on+the+Algorithmic+Language+Scheme&rft.volume=11&rft.issue=1&rft.pages=7-105&rft.date=1998-08&rft_id=info%3Adoi%2F10.1023%2FA%3A1010051815785&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A14069423%23id-name%3DS2CID&rft.au=Richard+Kelsey&rft.au=William+Clinger&rft.au=Jonathan+Rees&rft.au=Rozas%2C+G.J.&rft.au=Adams+Iv%2C+N.I.&rft.au=Friedman%2C+D.P.&rft.au=Kohlbecker%2C+E.&rft.au=Steele+Jr.%2C+G.L.&rft.au=Bartley%2C+D.H.&rft_id=http%3A%2F%2Fwww.schemers.org%2FDocuments%2FStandards%2FR5RS%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-r7rs-5"><span class="mw-cite-backlink">^ <a href="#cite_ref-r7rs_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-r7rs_5-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs.pdf">"R7RS final available"</a> <span class="cs1-format">(PDF)</span>. 2013-07-06.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=R7RS+final+available&rft.date=2013-07-06&rft_id=http%3A%2F%2Ftrac.sacrideo.us%2Fwg%2Fraw-attachment%2Fwiki%2FWikiStart%2Fr7rs.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-r6rs-6"><span class="mw-cite-backlink">^ <a href="#cite_ref-r6rs_6-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-r6rs_6-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-r6rs_6-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-r6rs_6-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-r6rs_6-4"><sup><i><b>e</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFSperberDybvigFlattVan_Straaten2007" class="citation web cs1">Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; et al. (August 2007). <a rel="nofollow" class="external text" href="http://www.r6rs.org">"Revised<sup>6</sup> Report on the Algorithmic Language Scheme (R6RS)"</a>. Scheme Steering Committee<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-09-13</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Revised%3Csup%3E6%3C%2Fsup%3E+Report+on+the+Algorithmic+Language+Scheme+%28R6RS%29&rft.pub=Scheme+Steering+Committee&rft.date=2007-08&rft.aulast=Sperber&rft.aufirst=Michael&rft.au=Dybvig%2C+R.+Kent&rft.au=Flatt%2C+Matthew&rft.au=Van+Straaten%2C+Anton&rft_id=http%3A%2F%2Fwww.r6rs.org&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-revisited-7"><span class="mw-cite-backlink">^ <a href="#cite_ref-revisited_7-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-revisited_7-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-revisited_7-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-revisited_7-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFSussmanSteele1998" class="citation journal cs1">Sussman, Gerald Jay; Steele, Guy L. (1 December 1998). "The First Report on Scheme Revisited". <i>Higher-Order and Symbolic Computation</i>. <b>11</b> (4): 399–404. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1023%2FA%3A1010079421970">10.1023/A:1010079421970</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:7704398">7704398</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Higher-Order+and+Symbolic+Computation&rft.atitle=The+First+Report+on+Scheme+Revisited&rft.volume=11&rft.issue=4&rft.pages=399-404&rft.date=1998-12-01&rft_id=info%3Adoi%2F10.1023%2FA%3A1010079421970&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A7704398%23id-name%3DS2CID&rft.aulast=Sussman&rft.aufirst=Gerald+Jay&rft.au=Steele%2C+Guy+L.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-rs6s_Implementations-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-rs6s_Implementations_8-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.r6rs.org/implementations.html">"R6RS Implementations"</a>. r6rs.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2017-11-24</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=R6RS+Implementations&rft.pub=r6rs.org&rft_id=http%3A%2F%2Fwww.r6rs.org%2Fimplementations.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-psyntax-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-psyntax_9-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFAbdulaziz_Ghuloum2007" class="citation web cs1">Abdulaziz Ghuloum (2007-10-27). <a rel="nofollow" class="external text" href="https://www.cs.indiana.edu/~aghuloum/r6rs-libraries/">"R6RS Libraries and syntax-case system (psyntax)"</a>. Ikarus Scheme<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-10-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=R6RS+Libraries+and+syntax-case+system+%28psyntax%29&rft.pub=Ikarus+Scheme&rft.date=2007-10-27&rft.au=Abdulaziz+Ghuloum&rft_id=https%3A%2F%2Fwww.cs.indiana.edu%2F~aghuloum%2Fr6rs-libraries%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKeepDybvig2014" class="citation journal cs1">Keep, Andrew W.; Dybvig, R. Kent (November 2014). <a rel="nofollow" class="external text" href="https://doi.org/10.1017%2FS0956796814000203">"A run-time representation of scheme record types"</a>. <i>Journal of Functional Programming</i>. <b>24</b> (6): 675–716. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1017%2FS0956796814000203">10.1017/S0956796814000203</a></span>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:40001845">40001845</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Functional+Programming&rft.atitle=A+run-time+representation+of+scheme+record+types&rft.volume=24&rft.issue=6&rft.pages=675-716&rft.date=2014-11&rft_id=info%3Adoi%2F10.1017%2FS0956796814000203&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A40001845%23id-name%3DS2CID&rft.aulast=Keep&rft.aufirst=Andrew+W.&rft.au=Dybvig%2C+R.+Kent&rft_id=https%3A%2F%2Fdoi.org%2F10.1017%252FS0956796814000203&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-r6rs_Language_changes-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-r6rs_Language_changes_11-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-19.html#node_chap_E">"Revised^6 Report on the Algorithmic Language Scheme, Appendix E: language changes"</a>. Scheme Steering Committee. 2007-09-26<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-10-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Revised%5E6+Report+on+the+Algorithmic+Language+Scheme%2C+Appendix+E%3A+language+changes&rft.pub=Scheme+Steering+Committee&rft.date=2007-09-26&rft_id=http%3A%2F%2Fwww.r6rs.org%2Ffinal%2Fhtml%2Fr6rs%2Fr6rs-Z-H-19.html%23node_chap_E&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-r6rs_electorate-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-r6rs_electorate_12-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.r6rs.org/ratification/electorate.html">"R6RS Electorate"</a>. Scheme Steering Committee. 2007<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=R6RS+Electorate&rft.pub=Scheme+Steering+Committee&rft.date=2007&rft_id=http%3A%2F%2Fwww.r6rs.org%2Fratification%2Felectorate.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-r6rs_feeley-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-r6rs_feeley_13-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMarc_Feeley_(compilation)2007" class="citation web cs1">Marc Feeley (compilation) (2007-10-26). <a rel="nofollow" class="external text" href="http://lists.r6rs.org/pipermail/r6rs-discuss/2007-October/003351.html">"Implementors' intentions concerning R6RS"</a>. Scheme Steering Committee, r6rs-discuss mailing list<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Implementors%27+intentions+concerning+R6RS&rft.pub=Scheme+Steering+Committee%2C+r6rs-discuss+mailing+list&rft.date=2007-10-26&rft.au=Marc+Feeley+%28compilation%29&rft_id=http%3A%2F%2Flists.r6rs.org%2Fpipermail%2Fr6rs-discuss%2F2007-October%2F003351.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-position_paper-14"><span class="mw-cite-backlink">^ <a href="#cite_ref-position_paper_14-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-position_paper_14-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWill_Clinger,_Marc_Feeley,_Chris_Hanson,_Jonathan_Rees_and_Olin_Shivers2009" class="citation web cs1">Will Clinger, Marc Feeley, Chris Hanson, Jonathan Rees and Olin Shivers (2009-08-20). <a rel="nofollow" class="external text" href="http://scheme-reports.org/2009/position-statement.html">"Position Statement <i>(draft)</i>"</a>. Scheme Steering Committee<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Position+Statement+%28draft%29&rft.pub=Scheme+Steering+Committee&rft.date=2009-08-20&rft.au=Will+Clinger%2C+Marc+Feeley%2C+Chris+Hanson%2C+Jonathan+Rees+and+Olin+Shivers&rft_id=http%3A%2F%2Fscheme-reports.org%2F2009%2Fposition-statement.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span><span class="cs1-maint citation-comment"><code class="cs1-code">{{<a href="/wiki/Template:Cite_web" title="Template:Cite web">cite web</a>}}</code>: CS1 maint: multiple names: authors list (<a href="/wiki/Category:CS1_maint:_multiple_names:_authors_list" title="Category:CS1 maint: multiple names: authors list">link</a>)</span></span> </li> <li id="cite_note-r7rs-draft-9-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-r7rs-draft-9_15-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs-draft-9.pdf">"R7RS 9th draft available"</a> <span class="cs1-format">(PDF)</span>. 2013-04-15.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=R7RS+9th+draft+available&rft.date=2013-04-15&rft_id=http%3A%2F%2Ftrac.sacrideo.us%2Fwg%2Fraw-attachment%2Fwiki%2FWikiStart%2Fr7rs-draft-9.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-r7rs_clinger-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-r7rs_clinger_16-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWill_Clinger2013" class="citation web cs1">Will Clinger (2013-05-10). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20130721162308/http://lists.scheme-reports.org/pipermail/scheme-reports/2013-May/003401.html">"extension of voting period"</a>. Scheme Language Steering Committee, scheme-reports mailing list. Archived from <a rel="nofollow" class="external text" href="http://lists.scheme-reports.org/pipermail/scheme-reports/2013-May/003401.html">the original</a> on 2013-07-21<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-07-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=extension+of+voting+period&rft.pub=Scheme+Language+Steering+Committee%2C+scheme-reports+mailing+list&rft.date=2013-05-10&rft.au=Will+Clinger&rft_id=http%3A%2F%2Flists.scheme-reports.org%2Fpipermail%2Fscheme-reports%2F2013-May%2F003401.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-easy_to_implement_scheme48-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-easy_to_implement_scheme48_17-0">^</a></b></span> <span class="reference-text">The <a href="/wiki/Scheme_48" title="Scheme 48">Scheme 48</a> implementation is so-named because the interpreter was written by Richard Kelsey and Jonathan Rees in 48 hours (August 6th – 7th, 1986. See <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRichard_KelseyJonathan_ReesMike_Sperber2008" class="citation web cs1">Richard Kelsey; Jonathan Rees; Mike Sperber (2008-01-10). <a rel="nofollow" class="external text" href="http://s48.org/1.8/manual/manual.html">"The Incomplete Scheme 48 Reference Manual for release 1.8"</a>. Jonathan Rees, s48.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+Incomplete+Scheme+48+Reference+Manual+for+release+1.8&rft.pub=Jonathan+Rees%2C+s48.org&rft.date=2008-01-10&rft.au=Richard+Kelsey&rft.au=Jonathan+Rees&rft.au=Mike+Sperber&rft_id=http%3A%2F%2Fs48.org%2F1.8%2Fmanual%2Fmanual.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-lambda_paper_1-18"><span class="mw-cite-backlink">^ <a href="#cite_ref-lambda_paper_1_18-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-lambda_paper_1_18-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGerald_Jay_SussmanGuy_Lewis_Steele_Jr.1975" class="citation journal cs1 cs1-prop-long-vol">Gerald Jay Sussman & Guy Lewis Steele Jr. (December 1975). <a rel="nofollow" class="external text" href="https://dspace.mit.edu/bitstream/handle/1721.1/5794/AIM-349.pdf">"Scheme: An Interpreter for Extended Lambda Calculus"</a> <span class="cs1-format">(PDF)</span>. <i>AI Memos</i>. AIM-349. <a href="/wiki/MIT_Computer_Science_and_Artificial_Intelligence_Laboratory" title="MIT Computer Science and Artificial Intelligence Laboratory">MIT AI Lab</a>. <a href="/wiki/Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<a rel="nofollow" class="external text" href="https://hdl.handle.net/1721.1%2F5794">1721.1/5794</a><span class="reference-accessdate">. Retrieved <span class="nowrap">23 December</span> 2021</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=AI+Memos&rft.atitle=Scheme%3A+An+Interpreter+for+Extended+Lambda+Calculus&rft.volume=AIM-349&rft.date=1975-12&rft_id=info%3Ahdl%2F1721.1%2F5794&rft.au=Gerald+Jay+Sussman&rft.au=Guy+Lewis+Steele+Jr.&rft_id=https%3A%2F%2Fdspace.mit.edu%2Fbitstream%2Fhandle%2F1721.1%2F5794%2FAIM-349.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-Moses-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-Moses_19-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFJoel_Moses1970" class="citation cs2"><a href="/wiki/Joel_Moses" title="Joel Moses">Joel Moses</a> (June 1970), <i>The Function of FUNCTION in LISP, or Why the FUNARG Problem Should Be Called the Environment Problem</i>, <a href="/wiki/Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<a rel="nofollow" class="external text" href="https://hdl.handle.net/1721.1%2F5854">1721.1/5854</a>, <a href="/wiki/AI_Memo" title="AI Memo">AI Memo</a> 199, <q>A useful metaphor for the difference between FUNCTION and QUOTE in LISP is to think of QUOTE as a porous or an open covering of the function since free variables escape to the current environment. FUNCTION acts as a closed or nonporous covering (hence the term "closure" used by Landin). Thus we talk of "open" Lambda expressions (functions in LISP are usually Lambda expressions) and "closed" Lambda expressions. [...] My interest in the environment problem began while Landin, who had a deep understanding of the problem, visited MIT during 1966-67. I then realized the correspondence between the FUNARG lists which are the results of the evaluation of "closed" Lambda expressions in <a href="/wiki/LISP_1.5" class="mw-redirect" title="LISP 1.5">LISP</a> and <a href="/wiki/ISWIM" title="ISWIM">ISWIM</a>'s Lambda Closures.</q></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=The+Function+of+FUNCTION+in+LISP%2C+or+Why+the+FUNARG+Problem+Should+Be+Called+the+Environment+Problem&rft.date=1970-06&rft_id=info%3Ahdl%2F1721.1%2F5854&rft.au=Joel+Moses&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFvan_Tonder2004" class="citation journal cs1">van Tonder, André (1 January 2004). "A Lambda Calculus for Quantum Computation". <i>SIAM Journal on Computing</i>. <b>33</b> (5): 1109–1135. <a href="/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/quant-ph/0307150">quant-ph/0307150</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1137%2FS0097539703432165">10.1137/S0097539703432165</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:613571">613571</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=SIAM+Journal+on+Computing&rft.atitle=A+Lambda+Calculus+for+Quantum+Computation&rft.volume=33&rft.issue=5&rft.pages=1109-1135&rft.date=2004-01-01&rft_id=info%3Aarxiv%2Fquant-ph%2F0307150&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A613571%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1137%2FS0097539703432165&rft.aulast=van+Tonder&rft.aufirst=Andr%C3%A9&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFNiehrenSchwinghammerSmolka2006" class="citation journal cs1">Niehren, J.; Schwinghammer, J.; Smolka, G. (November 2006). <a rel="nofollow" class="external text" href="https://hal.inria.fr/inria-00090434/file/0.pdf">"A concurrent lambda calculus with futures"</a> <span class="cs1-format">(PDF)</span>. <i>Theoretical Computer Science</i>. <b>364</b> (3): 338–356. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.tcs.2006.08.016">10.1016/j.tcs.2006.08.016</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Theoretical+Computer+Science&rft.atitle=A+concurrent+lambda+calculus+with+futures&rft.volume=364&rft.issue=3&rft.pages=338-356&rft.date=2006-11&rft_id=info%3Adoi%2F10.1016%2Fj.tcs.2006.08.016&rft.aulast=Niehren&rft.aufirst=J.&rft.au=Schwinghammer%2C+J.&rft.au=Smolka%2C+G.&rft_id=https%3A%2F%2Fhal.inria.fr%2Finria-00090434%2Ffile%2F0.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-lambda_paper_2-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-lambda_paper_2_22-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGerald_Jay_SussmanGuy_Lewis_Steele_Jr.1976" class="citation journal cs1 cs1-prop-long-vol">Gerald Jay Sussman & Guy Lewis Steele Jr. (March 1976). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160510140804/http://library.readscheme.org/page1.html">"Lambda: The Ultimate Imperative"</a>. <i>AI Memos</i>. AIM-353. <a href="/wiki/MIT_Computer_Science_and_Artificial_Intelligence_Laboratory" title="MIT Computer Science and Artificial Intelligence Laboratory">MIT AI Lab</a>. Archived from <a rel="nofollow" class="external text" href="http://library.readscheme.org/page1.html">the original</a> <span class="cs1-format">(postscript or PDF)</span> on 2016-05-10<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=AI+Memos&rft.atitle=Lambda%3A+The+Ultimate+Imperative&rft.volume=AIM-353&rft.date=1976-03&rft.au=Gerald+Jay+Sussman&rft.au=Guy+Lewis+Steele+Jr.&rft_id=http%3A%2F%2Flibrary.readscheme.org%2Fpage1.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGabrielPitman1988" class="citation news cs1"><a href="/wiki/Richard_P._Gabriel" title="Richard P. Gabriel">Gabriel, Richard P.</a>; <a href="/wiki/Kent_Pitman" title="Kent Pitman">Pitman, Kent</a> (1988). <a rel="nofollow" class="external text" href="http://www.nhplace.com/kent/Papers/Technical-Issues.html">"Technical Issues of Separation in Function Cells and Value Cells"</a>. <i>LISP and Symbolic Computation</i>. Vol. 1, no. 1 (published June 1988). pp. 81–101. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2FBF01806178">10.1007/BF01806178</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=LISP+and+Symbolic+Computation&rft.atitle=Technical+Issues+of+Separation+in+Function+Cells+and+Value+Cells&rft.volume=1&rft.issue=1&rft.pages=81-101&rft.date=1988&rft_id=info%3Adoi%2F10.1007%2FBF01806178&rft.aulast=Gabriel&rft.aufirst=Richard+P.&rft.au=Pitman%2C+Kent&rft_id=http%3A%2F%2Fwww.nhplace.com%2Fkent%2FPapers%2FTechnical-Issues.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-srfi-41-24"><span class="mw-cite-backlink">^ <a href="#cite_ref-srfi-41_24-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-srfi-41_24-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPhilip_L._Bewig2008" class="citation web cs1">Philip L. Bewig (2008-01-24). <a rel="nofollow" class="external text" href="http://srfi.schemers.org/srfi-41/srfi-41.html">"SRFI 41: Streams"</a>. The SRFI Editors, schemers.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=SRFI+41%3A+Streams&rft.pub=The+SRFI+Editors%2C+schemers.org&rft.date=2008-01-24&rft.au=Philip+L.+Bewig&rft_id=http%3A%2F%2Fsrfi.schemers.org%2Fsrfi-41%2Fsrfi-41.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-r4rs-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-r4rs_25-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWilliam_Clinger_and_Jonathan_Rees1991" class="citation journal cs1">William Clinger and Jonathan Rees, ed. (1991). <a rel="nofollow" class="external text" href="http://www.cs.indiana.edu/scheme-repository/R4RS/r4rs_toc.html">"Revised<sup>4</sup> Report on the Algorithmic Language Scheme"</a>. <i>ACM Lisp Pointers</i>. <b>4</b> (3): 1–55<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=ACM+Lisp+Pointers&rft.atitle=Revised%3Csup%3E4%3C%2Fsup%3E+Report+on+the+Algorithmic+Language+Scheme&rft.volume=4&rft.issue=3&rft.pages=1-55&rft.date=1991&rft_id=http%3A%2F%2Fwww.cs.indiana.edu%2Fscheme-repository%2FR4RS%2Fr4rs_toc.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFFlatt2016" class="citation book cs1">Flatt, Matthew (2016). "Binding as sets of scopes". <i>Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages</i>. pp. 705–717. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F2837614.2837620">10.1145/2837614.2837620</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-1-4503-3549-2" title="Special:BookSources/978-1-4503-3549-2"><bdi>978-1-4503-3549-2</bdi></a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:15401805">15401805</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Binding+as+sets+of+scopes&rft.btitle=Proceedings+of+the+43rd+Annual+ACM+SIGPLAN-SIGACT+Symposium+on+Principles+of+Programming+Languages&rft.pages=705-717&rft.date=2016&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A15401805%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1145%2F2837614.2837620&rft.isbn=978-1-4503-3549-2&rft.aulast=Flatt&rft.aufirst=Matthew&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-rees_1992-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-rees_1992_27-0">^</a></b></span> <span class="reference-text">Jonathan Rees, <a rel="nofollow" class="external text" href="http://mumble.net/~jar/pubs/scheme-of-things/june-92-meeting.ps">The Scheme of Things The June 1992 Meeting</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20110716071317/http://mumble.net/~jar/pubs/scheme-of-things/june-92-meeting.ps">Archived</a> 2011-07-16 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a> (postscript), in Lisp Pointers, V(4), October–December 1992. Retrieved 2012-08-09</span> </li> <li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFTaylor_Campbell2005" class="citation web cs1">Taylor Campbell (2005-07-21). <a rel="nofollow" class="external text" href="http://srfi.schemers.org/srfi-62/srfi-62.html">"SRFI 62: S-expression comments"</a>. The SRFI Editors, schemers.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=SRFI+62%3A+S-expression+comments&rft.pub=The+SRFI+Editors%2C+schemers.org&rft.date=2005-07-21&rft.au=Taylor+Campbell&rft_id=http%3A%2F%2Fsrfi.schemers.org%2Fsrfi-62%2Fsrfi-62.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-srfi-6-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-srfi-6_29-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWilliam_D_Clinger1999" class="citation web cs1">William D Clinger (1999-07-01). <a rel="nofollow" class="external text" href="http://srfi.schemers.org/srfi-6/srfi-6.html">"SRFI 6: Basic String Ports"</a>. The SRFI Editors, schemers.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=SRFI+6%3A+Basic+String+Ports&rft.pub=The+SRFI+Editors%2C+schemers.org&rft.date=1999-07-01&rft.au=William+D+Clinger&rft_id=http%3A%2F%2Fsrfi.schemers.org%2Fsrfi-6%2Fsrfi-6.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-srfi-28-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-srfi-28_30-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFScott_G._Miller2002" class="citation web cs1">Scott G. Miller (2002-06-25). <a rel="nofollow" class="external text" href="http://srfi.schemers.org/srfi-28/srfi-28.html">"SRFI 28: Basic Format Strings"</a>. The SRFI Editors, schemers.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=SRFI+28%3A+Basic+Format+Strings&rft.pub=The+SRFI+Editors%2C+schemers.org&rft.date=2002-06-25&rft.au=Scott+G.+Miller&rft_id=http%3A%2F%2Fsrfi.schemers.org%2Fsrfi-28%2Fsrfi-28.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-algol_report-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-algol_report_31-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFJ.W._BackusF.L._BauerJ.GreenC._Katz1960" class="citation journal cs1">J.W. Backus; F.L. Bauer; J.Green; C. Katz; J. McCarthy P. Naur; et al. (January–April 1960). <a rel="nofollow" class="external text" href="http://www.masswerk.at/algol60/report.htm">"Revised Report on the Algorithmic Language Algol 60"</a>. <i>Numerische Mathematik, Communications of the ACM, and Journal of the British Computer Society</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Numerische+Mathematik%2C+Communications+of+the+ACM%2C+and+Journal+of+the+British+Computer+Society&rft.atitle=Revised+Report+on+the+Algorithmic+Language+Algol+60&rft.date=1960-01%2F1960-04&rft.au=J.W.+Backus&rft.au=F.L.+Bauer&rft.au=J.Green&rft.au=C.+Katz&rft.au=J.+McCarthy+P.+Naur&rft_id=http%3A%2F%2Fwww.masswerk.at%2Falgol60%2Freport.htm&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-r3rs-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-r3rs_32-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFJonathan_ReesWilliam_Clinger1986" class="citation journal cs1">Jonathan Rees; William Clinger, eds. (December 1986). <a rel="nofollow" class="external text" href="http://groups.csail.mit.edu/mac/ftpdir/scheme-reports/r3rs-html/r3rs_toc.html">"Revised(3) Report on the Algorithmic Language Scheme (Dedicated to the Memory of ALGOL 60)"</a>. <i>ACM SIGPLAN Notices</i>. <b>21</b> (12): 37–79. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.29.3015">10.1.1.29.3015</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F15042.15043">10.1145/15042.15043</a>. <a href="/wiki/Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<a rel="nofollow" class="external text" href="https://hdl.handle.net/1721.1%2F6424">1721.1/6424</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:43884422">43884422</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=ACM+SIGPLAN+Notices&rft.atitle=Revised%283%29+Report+on+the+Algorithmic+Language+Scheme+%28Dedicated+to+the+Memory+of+ALGOL+60%29&rft.volume=21&rft.issue=12&rft.pages=37-79&rft.date=1986-12&rft_id=info%3Ahdl%2F1721.1%2F6424&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A43884422%23id-name%3DS2CID&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.29.3015%23id-name%3DCiteSeerX&rft_id=info%3Adoi%2F10.1145%2F15042.15043&rft_id=http%3A%2F%2Fgroups.csail.mit.edu%2Fmac%2Fftpdir%2Fscheme-reports%2Fr3rs-html%2Fr3rs_toc.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-srfi_support-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-srfi_support_33-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://srfi.schemers.org/srfi-implementers.html">"Scheme Systems Supporting SRFIs"</a>. The SRFI Editors, schemers.org. 2009-08-30<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Scheme+Systems+Supporting+SRFIs&rft.pub=The+SRFI+Editors%2C+schemers.org&rft.date=2009-08-30&rft_id=http%3A%2F%2Fsrfi.schemers.org%2Fsrfi-implementers.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-scheme_implementations-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-scheme_implementations_34-0">^</a></b></span> <span class="reference-text">75 known implementations of Scheme are listed by <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://community.schemewiki.org/?scheme-faq-standards#implementations">"scheme-faq-standards"</a>. Community Scheme Wiki. 2009-06-25<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-10-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=scheme-faq-standards&rft.pub=Community+Scheme+Wiki&rft.date=2009-06-25&rft_id=http%3A%2F%2Fcommunity.schemewiki.org%2F%3Fscheme-faq-standards%23implementations&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-schemers_inc-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-schemers_inc_35-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFEd_Martin2009" class="citation web cs1">Ed Martin (2009-07-20). <a rel="nofollow" class="external text" href="http://www.schemers.com/schools.html">"List of Scheme-using schools"</a>. Schemers Inc<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-10-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=List+of+Scheme-using+schools&rft.pub=Schemers+Inc.&rft.date=2009-07-20&rft.au=Ed+Martin&rft_id=http%3A%2F%2Fwww.schemers.com%2Fschools.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-sicp_adopters-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-sicp_adopters_36-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://mitpress.mit.edu/sicp/adopt-list.html">"List of SICP-using schools"</a>. MIT Press. 1999-01-26<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-10-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=List+of+SICP-using+schools&rft.pub=MIT+Press&rft.date=1999-01-26&rft_id=http%3A%2F%2Fmitpress.mit.edu%2Fsicp%2Fadopt-list.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-6.001-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-6.001_37-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFEric_Grimson2005" class="citation web cs1"><a href="/wiki/Eric_Grimson" title="Eric Grimson">Eric Grimson</a> (Spring 2005). <a rel="nofollow" class="external text" href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/CourseHome/index.htm">"6.001 Structure and Interpretation of Computer Programs"</a>. MIT Open Courseware<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-10-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=6.001+Structure+and+Interpretation+of+Computer+Programs&rft.pub=MIT+Open+Courseware&rft.date=2005&rft.au=Eric+Grimson&rft_id=http%3A%2F%2Focw.mit.edu%2FOcwWeb%2FElectrical-Engineering-and-Computer-Science%2F6-001Spring-2005%2FCourseHome%2Findex.htm&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-6.001_zombies-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-6.001_zombies_38-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFAlex_VandiverNelson_Elhage2009" class="citation web cs1">Alex Vandiver; Nelson Elhage; et al. (January 2009). <a rel="nofollow" class="external text" href="http://web.mit.edu/alexmv/6.001/">"6.184 - Zombies drink caffeinated 6.001"</a>. MIT CSAIL<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-10-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=6.184+-+Zombies+drink+caffeinated+6.001&rft.pub=MIT+CSAIL&rft.date=2009-01&rft.au=Alex+Vandiver&rft.au=Nelson+Elhage&rft_id=http%3A%2F%2Fweb.mit.edu%2Falexmv%2F6.001%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-61A-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-61A_39-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFJohn_DeNero2019" class="citation web cs1">John DeNero (Fall 2019). <a rel="nofollow" class="external text" href="https://cs61a.org/articles/about.html">"Computer Science 61A, Berkeley"</a>. Department of Electrical Engineering and Computer Sciences, Berkeley<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-12-17</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Computer+Science+61A%2C+Berkeley&rft.pub=Department+of+Electrical+Engineering+and+Computer+Sciences%2C+Berkeley&rft.date=2019&rft.au=John+DeNero&rft_id=https%3A%2F%2Fcs61a.org%2Farticles%2Fabout.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-neu-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-neu_40-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.ccs.neu.edu/course/cs2500/">CS 2500: Fundamentals of Computer Science I</a>, <a href="/wiki/Northeastern_University" title="Northeastern University">Northeastern University</a></span> </li> <li id="cite_note-wpi-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-wpi_41-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://web.cs.wpi.edu/~cs1101/a05/details.html#software">CS 1101: Introduction to Program Design (A05): course software</a>, <a href="/wiki/Worcester_Polytechnic_Institute" title="Worcester Polytechnic Institute">Worcester Polytechnic Institute</a></span> </li> <li id="cite_note-rhit-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-rhit_42-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.rose-hulman.edu/Users/faculty/young/CS-Classes/csse304/syllabus.html">"CSSE 304: Programming Language Concepts"</a>. <a href="/wiki/Rose-Hulman_Institute_of_Technology" class="mw-redirect" title="Rose-Hulman Institute of Technology">Rose-Hulman Institute of Technology</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=CSSE+304%3A+Programming+Language+Concepts&rft.pub=Rose-Hulman+Institute+of+Technology&rft_id=https%3A%2F%2Fwww.rose-hulman.edu%2FUsers%2Ffaculty%2Fyoung%2FCS-Classes%2Fcsse304%2Fsyllabus.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-brandeis-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-brandeis_43-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://moodle2.brandeis.edu/syllabus/public/1202dcdfe19c0860e226f6447f66875c.pdf">"Spring 2021 CS121b Syllabus"</a> <span class="cs1-format">(PDF)</span>. <a href="/wiki/Brandeis_University" title="Brandeis University">Brandeis University</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Spring+2021+CS121b+Syllabus&rft.pub=Brandeis+University&rft_id=https%3A%2F%2Fmoodle2.brandeis.edu%2Fsyllabus%2Fpublic%2F1202dcdfe19c0860e226f6447f66875c.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://berkeley-cs61as.github.io/">"Home"</a>. <i>berkeley-cs61as.github.io</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=berkeley-cs61as.github.io&rft.atitle=Home&rft_id=https%3A%2F%2Fberkeley-cs61as.github.io%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-yale_cs201-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-yale_cs201_45-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDana_Angluin2009" class="citation web cs1">Dana Angluin (Fall 2009). <a rel="nofollow" class="external text" href="http://zoo.cs.yale.edu/classes/cs201/">"Introduction to Computer Science (CPSC 201)"</a>. The Zoo, Yale University Computer Science Department<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-10-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Introduction+to+Computer+Science+%28CPSC+201%29&rft.pub=The+Zoo%2C+Yale+University+Computer+Science+Department&rft.date=2009&rft.au=Dana+Angluin&rft_id=http%3A%2F%2Fzoo.cs.yale.edu%2Fclasses%2Fcs201%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-neu2-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-neu2_46-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.ccs.neu.edu/home/matthias/107-f08/readings.html">"Programming Design Paradigms CSG107 Course Readings"</a>. Northeastern University College of Computer and Information Science. Fall 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Programming+Design+Paradigms+CSG107+Course+Readings&rft.pub=Northeastern+University+College+of+Computer+and+Information+Science&rft.date=2009&rft_id=http%3A%2F%2Fwww.ccs.neu.edu%2Fhome%2Fmatthias%2F107-f08%2Freadings.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-umn-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-umn_47-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www-users.itlabs.umn.edu/classes/Spring-2010/csci1901/">Structure of Computer Programming I</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100619111110/http://www-users.itlabs.umn.edu/classes/Spring-2010/csci1901/">Archived</a> 2010-06-19 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a>, Computer Science Department, University of Minnesota, Spring 2010 (accessed 2010-01-30).</span> </li> <li id="cite_note-umn2-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-umn2_48-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.cs.umn.edu/academics/undergraduate/curriculum/required">CSci Required Class Course Descriptions and Other Information</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20191025145152/https://www.cs.umn.edu/academics/undergraduate/curriculum/required">Archived</a> 2019-10-25 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a>, Computer Science Department, University of Minnesota (accessed 2019-10-25)</span> </li> <li id="cite_note-umn3-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-umn3_49-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.csdy.umn.edu/~shield/csecc/minutes/2013-4-23/csci2041.html">CSCI 2041—New Course</a> CSE Curriculum Committee, University of Minnesota (accessed 2019-10-25)</span> </li> <li id="cite_note-dsssl-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-dsssl_50-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRobin_Cover2002" class="citation web cs1">Robin Cover (2002-02-25). <a rel="nofollow" class="external text" href="http://xml.coverpages.org/dsssl.html">"DSSSL - Document Style Semantics and Specification Language. ISO/IEC 10179:1996"</a>. Cover Pages<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=DSSSL+-+Document+Style+Semantics+and+Specification+Language.+ISO%2FIEC+10179%3A1996&rft.pub=Cover+Pages&rft.date=2002-02-25&rft.au=Robin+Cover&rft_id=http%3A%2F%2Fxml.coverpages.org%2Fdsssl.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-gimp-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-gimp_51-0">^</a></b></span> <span class="reference-text">"<i>The major scripting language for the GIMP that has been attached to it today is Scheme.</i>" From <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDov_Grobgeld2002" class="citation web cs1">Dov Grobgeld (2002). <a rel="nofollow" class="external text" href="http://www.gimp.org/tutorials/Basic_Scheme/">"The GIMP Basic Scheme Tutorial"</a>. The GIMP Team<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+GIMP+Basic+Scheme+Tutorial&rft.pub=The+GIMP+Team&rft.date=2002&rft.au=Dov+Grobgeld&rft_id=http%3A%2F%2Fwww.gimp.org%2Ftutorials%2FBasic_Scheme%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-archive_gnomefaq-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-archive_gnomefaq_52-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFTodd_Graham_LewisDavid_ZollJulian_Missig2002" class="citation web cs1">Todd Graham Lewis; David Zoll; Julian Missig (2002). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20000522010523/http://www.gnome.org/gnomefaq/html/x930.html">"GNOME FAQ from Internet Archive"</a>. The Gnome Team, gnome.org. Archived from <a rel="nofollow" class="external text" href="http://www.gnome.org/gnomefaq/html/x930.html">the original</a> on 2000-05-22<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=GNOME+FAQ+from+Internet+Archive&rft.pub=The+Gnome+Team%2C+gnome.org&rft.date=2002&rft.au=Todd+Graham+Lewis&rft.au=David+Zoll&rft.au=Julian+Missig&rft_id=http%3A%2F%2Fwww.gnome.org%2Fgnomefaq%2Fhtml%2Fx930.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-live_gnome-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-live_gnome_53-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.gnu.org/software/guile-gnome/">"guile-gnome"</a>. Free Software Foundation<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=guile-gnome&rft.pub=Free+Software+Foundation&rft_id=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Fguile-gnome%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-tcad-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-tcad_54-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLaurence_Brevard2006" class="citation web cs1">Laurence Brevard (2006-11-09). <a rel="nofollow" class="external text" href="http://www.synopsys.com/community/interoperability/documents/devforum_pres/2006nov/milkywaysession_mapin_overview.pdf">"Synopsys MAP-in<sup>SM</sup> Program Update: EDA Interoperability Developers' Forum"</a> <span class="cs1-format">(PDF)</span>. Synopsis Inc<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Synopsys+MAP-in%3Csup%3ESM%3C%2Fsup%3E+Program+Update%3A+EDA+Interoperability+Developers%27+Forum&rft.pub=Synopsis+Inc&rft.date=2006-11-09&rft.au=Laurence+Brevard&rft_id=http%3A%2F%2Fwww.synopsys.com%2Fcommunity%2Finteroperability%2Fdocuments%2Fdevforum_pres%2F2006nov%2Fmilkywaysession_mapin_overview.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-shiro_kawai-55"><span class="mw-cite-backlink"><b><a href="#cite_ref-shiro_kawai_55-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKawai2002" class="citation journal cs1">Kawai, Shiro (October 2002). <a rel="nofollow" class="external text" href="http://practical-scheme.net/docs/ILC2002.html">"Gluing Things Together - Scheme in the Real-time CG Content Production"</a>. <i>Proceedings of the First International Lisp Conference, San Francisco</i>: 342–348<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Proceedings+of+the+First+International+Lisp+Conference%2C+San+Francisco&rft.atitle=Gluing+Things+Together+-+Scheme+in+the+Real-time+CG+Content+Production&rft.pages=342-348&rft.date=2002-10&rft.aulast=Kawai&rft.aufirst=Shiro&rft_id=http%3A%2F%2Fpractical-scheme.net%2Fdocs%2FILC2002.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> <li id="cite_note-android-56"><span class="mw-cite-backlink"><b><a href="#cite_ref-android_56-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBill_MagnusonHal_AbelsonMark_Friedman2009" class="citation web cs1">Bill Magnuson; Hal Abelson & Mark Friedman (2009-08-11). <a rel="nofollow" class="external text" href="http://googleresearch.blogspot.com/2009/08/under-hood-of-app-inventor-for-android.html">"Under the Hood of App Inventor for Android"</a>. Google Inc, Official Google Research blog<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Under+the+Hood+of+App+Inventor+for+Android&rft.pub=Google+Inc%2C+Official+Google+Research+blog&rft.date=2009-08-11&rft.au=Bill+Magnuson&rft.au=Hal+Abelson&rft.au=Mark+Friedman&rft_id=http%3A%2F%2Fgoogleresearch.blogspot.com%2F2009%2F08%2Funder-hood-of-app-inventor-for-android.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></span> </li> </ol></div> <div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=34" title="Edit section: Further reading"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="ftp://ftp.cs.utexas.edu/pub/garbage/cs345/schintro-v14/schintro_toc.html">An Introduction to Scheme and its Implementation</a> (<a rel="nofollow" class="external text" href="http://icem-www.folkwang-hochschule.de/~finnendahl/cm_kurse/doc/schintro/schintro_toc.html">a mirror</a>)</li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFChristopher_T._Haynes1999" class="citation web cs1">Christopher T. Haynes (1999-06-22). <a rel="nofollow" class="external text" href="http://acm.org/tsc/sstd.html">"The Scheme Programming Language Standardization Experience"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+Scheme+Programming+Language+Standardization+Experience&rft.date=1999-06-22&rft.au=Christopher+T.+Haynes&rft_id=http%3A%2F%2Facm.org%2Ftsc%2Fsstd.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGuy_L._Steele_Jr.,_Richard_P._Gabriel" class="citation web cs1"><a href="/wiki/Guy_L._Steele_Jr." title="Guy L. Steele Jr.">Guy L. Steele Jr.</a>, <a href="/wiki/Richard_P._Gabriel" title="Richard P. Gabriel">Richard P. Gabriel</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160611055324/http://www.dreamsongs.org/Files/HOPL2-Uncut.pdf">"The Evolution of Lisp"</a> <span class="cs1-format">(PDF)</span>. Archived from <a rel="nofollow" class="external text" href="http://www.dreamsongs.org/Files/HOPL2-Uncut.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2016-06-11.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+Evolution+of+Lisp&rft.au=Guy+L.+Steele+Jr.%2C+Richard+P.+Gabriel&rft_id=http%3A%2F%2Fwww.dreamsongs.org%2FFiles%2FHOPL2-Uncut.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGerald_Jay_SussmanGuy_Lewis_Steele_Jr.1975" class="citation cs1 cs1-prop-long-vol"><a href="/wiki/Gerald_Sussman" class="mw-redirect" title="Gerald Sussman">Gerald Jay Sussman</a> & <a href="/wiki/Guy_Steele" class="mw-redirect" title="Guy Steele">Guy Lewis Steele Jr.</a> (December 1975). <span class="cs1-ws-icon" title="s:Scheme: An Interpreter for Extended Lambda Calculus"><a class="external text" href="https://en.wikisource.org/wiki/Scheme:_An_Interpreter_for_Extended_Lambda_Calculus"><i>Scheme: An Interpreter for Extended Lambda Calculus</i> </a></span>. Vol. AI Memo 349. <a href="/wiki/MIT_Computer_Science_and_Artificial_Intelligence_Laboratory" title="MIT Computer Science and Artificial Intelligence Laboratory">MIT Artificial Intelligence Lab</a>. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.128.80">10.1.1.128.80</a></span> – via <a href="/wiki/Wikisource" title="Wikisource">Wikisource</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Scheme%3A+An+Interpreter+for+Extended+Lambda+Calculus&rft.pub=MIT+Artificial+Intelligence+Lab&rft.date=1975-12&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.128.80%23id-name%3DCiteSeerX&rft.au=Gerald+Jay+Sussman&rft.au=Guy+Lewis+Steele+Jr.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AScheme+%28programming+language%29" class="Z3988"></span></li></ul> <div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Scheme_(programming_language)&action=edit&section=35" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="https://scheme.org/">scheme.org</a> provides links to many Scheme resources, including the specifications</li> <li><span class="noviewer" typeof="mw:File"><a href="/wiki/File:Wikibooks-logo-en-noslogan.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/16px-Wikibooks-logo-en-noslogan.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/24px-Wikibooks-logo-en-noslogan.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/32px-Wikibooks-logo-en-noslogan.svg.png 2x" data-file-width="400" data-file-height="400" /></a></span> <a href="https://en.wikibooks.org/wiki/Scheme_Programming" class="extiw" title="wikibooks:Scheme Programming">Scheme Programming</a> at Wikibooks</li> <li><a rel="nofollow" class="external text" href="https://lips.js.org/docs/category/introduction-to-scheme">Introduction to Scheme</a></li> <li><span class="noviewer" typeof="mw:File"><a href="/wiki/File:Wikibooks-logo-en-noslogan.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/16px-Wikibooks-logo-en-noslogan.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/24px-Wikibooks-logo-en-noslogan.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/32px-Wikibooks-logo-en-noslogan.svg.png 2x" data-file-width="400" data-file-height="400" /></a></span> <a href="https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours" class="extiw" title="wikibooks:Write Yourself a Scheme in 48 Hours">Write Yourself a Scheme in 48 Hours</a> at Wikibooks</li> <li><span class="noviewer" typeof="mw:File"><a href="/wiki/File:Commons-logo.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/12px-Commons-logo.svg.png" decoding="async" width="12" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/18px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/24px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376" /></a></span> Media related to <a href="https://commons.wikimedia.org/wiki/Category:Scheme_(programming_language)" class="extiw" title="commons:Category:Scheme (programming language)">Scheme (programming language)</a> at Wikimedia Commons</li> <li><a rel="nofollow" class="external text" href="https://discu.eu/weekly/lisp/">Scheme Weekly</a></li> <li><a rel="nofollow" class="external text" href="https://lips.js.org/#bookmark">Bookmarklet that add Interactive Scheme REPL to any website</a></li></ul> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="Lisp_programming_language" style="padding:3px"><table class="nowraplinks hlist mw-collapsible mw-collapsed navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239400231"><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Lisp_programming_language" title="Template:Lisp programming language"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Lisp_programming_language" title="Template talk:Lisp programming language"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Lisp_programming_language" title="Special:EditPage/Template:Lisp programming language"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Lisp_programming_language" style="font-size:114%;margin:0 4em"><a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp programming language</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Features</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Garbage_collection_(computer_science)" title="Garbage collection (computer science)">Automatic storage management</a></li> <li><a href="/wiki/Conditional_(computer_programming)" title="Conditional (computer programming)">Conditionals</a></li> <li><a href="/wiki/Dynamic_typing" class="mw-redirect" title="Dynamic typing">Dynamic typing</a></li> <li><a href="/wiki/Higher-order_function" title="Higher-order function">Higher-order functions</a></li> <li><a href="/wiki/Linked_list" title="Linked list">Linked lists</a></li> <li><a href="/wiki/Macro_(computer_science)" title="Macro (computer science)">Macros</a></li> <li><a href="/wiki/M-expression" title="M-expression">M-expressions</a> (deprecated)</li> <li><a href="/wiki/Read%E2%80%93eval%E2%80%93print_loop" title="Read–eval–print loop">Read–eval–print loop</a></li> <li><a href="/wiki/Recursion_(computer_science)" title="Recursion (computer science)">Recursion</a></li> <li><a href="/wiki/S-expression" title="S-expression">S-expressions</a></li> <li><a href="/wiki/Self-hosting_(compilers)" title="Self-hosting (compilers)">Self-hosting</a> <a href="/wiki/Compiler" title="Compiler">compiler</a></li> <li><a href="/wiki/Tree_data_structure" class="mw-redirect" title="Tree data structure">Tree data structures</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Object-oriented_programming" title="Object-oriented programming">Object</a> systems</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Common_Lisp_Object_System" title="Common Lisp Object System">Common Lisp Object System</a> (CLOS)</li> <li><a href="/wiki/CommonLoops" title="CommonLoops">CommonLoops</a></li> <li><a href="/wiki/Flavors_(programming_language)" title="Flavors (programming language)">Flavors</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Programming_language_implementation" title="Programming language implementation">Implementations</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Technical_standard" title="Technical standard">Standardized</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Common_Lisp" title="Common Lisp">Common<br />Lisp</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Allegro_Common_Lisp" title="Allegro Common Lisp">Allegro Common Lisp</a></li> <li><a href="/wiki/Armed_Bear_Common_Lisp" class="mw-redirect" title="Armed Bear Common Lisp">Armed Bear Common Lisp</a> (ABCL)</li> <li><a href="/wiki/CLISP" title="CLISP">CLISP</a></li> <li><a href="/wiki/Clozure_CL" title="Clozure CL">Clozure CL</a></li> <li><a href="/wiki/CMU_Common_Lisp" title="CMU Common Lisp">CMU Common Lisp</a> (CMUCL)</li> <li><a href="/wiki/Corman_Common_Lisp" class="mw-redirect" title="Corman Common Lisp">Corman Common Lisp</a></li> <li><a href="/wiki/Embeddable_Common_Lisp" title="Embeddable Common Lisp">Embeddable Common Lisp</a> (ECL)</li> <li><a href="/wiki/GNU_Common_Lisp" title="GNU Common Lisp">GNU Common Lisp</a> (GCL)</li> <li><a href="/wiki/LispWorks" title="LispWorks">LispWorks</a></li> <li><a href="/wiki/Macintosh_Common_Lisp" title="Macintosh Common Lisp">Macintosh Common Lisp</a></li> <li><a href="/wiki/Mocl" title="Mocl">Mocl</a></li> <li>Movitz</li> <li><a href="/wiki/Poplog" title="Poplog">Poplog</a></li> <li><a href="/wiki/Steel_Bank_Common_Lisp" title="Steel Bank Common Lisp">Steel Bank Common Lisp</a> (SBCL)</li> <li><a href="/wiki/Genera_(operating_system)" title="Genera (operating system)">Symbolics Common Lisp</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a class="mw-selflink selflink">Scheme</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><i><a href="/wiki/History_of_the_Scheme_programming_language" title="History of the Scheme programming language">History</a></i></li> <li><a href="/wiki/Bigloo" title="Bigloo">Bigloo</a></li> <li><a href="/wiki/Chez_Scheme" title="Chez Scheme">Chez Scheme</a></li> <li><a href="/wiki/Chicken_(Scheme_implementation)" title="Chicken (Scheme implementation)">Chicken</a></li> <li><a href="/wiki/Gambit_(scheme_implementation)" class="mw-redirect" title="Gambit (scheme implementation)">Gambit</a></li> <li><a href="/wiki/Game_Oriented_Assembly_Lisp" title="Game Oriented Assembly Lisp">Game Oriented Assembly Lisp</a> (GOAL)</li> <li><a href="/wiki/GNU_Guile" title="GNU Guile">GNU Guile</a></li> <li><a href="/wiki/Ikarus_(Scheme_implementation)" title="Ikarus (Scheme implementation)">Ikarus</a></li> <li><a href="/wiki/JScheme" title="JScheme">JScheme</a></li> <li><a href="/wiki/Kawa_(Scheme_implementation)" title="Kawa (Scheme implementation)">Kawa</a></li> <li><a href="/wiki/MIT/GNU_Scheme" title="MIT/GNU Scheme">MIT/GNU Scheme</a></li> <li><a href="/wiki/MultiLisp" title="MultiLisp">MultiLisp</a></li> <li><a href="/wiki/Pico_(programming_language)" title="Pico (programming language)">Pico</a></li> <li>Pocket Scheme</li> <li><a href="/wiki/Racket_(programming_language)" title="Racket (programming language)">Racket</a> (<a href="/wiki/Racket_features" title="Racket features">features</a>)</li> <li><a href="/wiki/Scheme_48" title="Scheme 48">Scheme 48</a></li> <li><a href="/wiki/SCM_(Scheme_implementation)" title="SCM (Scheme implementation)">SCM</a></li> <li><a href="/wiki/SIOD" title="SIOD">SIOD</a></li> <li><a href="/wiki/T_(programming_language)" title="T (programming language)">T</a></li> <li><a href="/wiki/TinyScheme" title="TinyScheme">TinyScheme</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/ISLISP" title="ISLISP">ISLISP</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/OpenLisp" title="OpenLisp">OpenLisp</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Unstandardized</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Logo_(programming_language)" title="Logo (programming language)">Logo</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/MSWLogo" title="MSWLogo">MSWLogo</a></li> <li><a href="/wiki/NetLogo" title="NetLogo">NetLogo</a></li> <li><a href="/wiki/StarLogo" title="StarLogo">StarLogo</a></li> <li><a href="/wiki/UCBLogo" title="UCBLogo">UCBLogo</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/POP-11" title="POP-11">POP</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/COWSEL" title="COWSEL">COWSEL</a> (POP-1)</li> <li><a href="/wiki/POP-2" title="POP-2">POP-2</a></li> <li><a href="/wiki/POP-11" title="POP-11">POP-11</a></li></ul> </div></td></tr></tbody></table><div> <ul><li><a href="/wiki/Arc_(programming_language)" title="Arc (programming language)">Arc</a></li> <li><a href="/wiki/AutoLISP" title="AutoLISP">AutoLISP</a></li> <li><a href="/wiki/BBN_LISP" title="BBN LISP">BBN LISP</a></li> <li><a href="/wiki/Clojure" title="Clojure">Clojure</a></li> <li><a href="/wiki/Dylan_(programming_language)" title="Dylan (programming language)">Dylan</a> (<a href="/wiki/Apple_Dylan" title="Apple Dylan">Apple</a>, <i><a href="/wiki/History_of_the_Dylan_programming_language" title="History of the Dylan programming language">history</a></i>)</li> <li><a href="/wiki/Emacs_Lisp" title="Emacs Lisp">Emacs Lisp</a></li> <li><a href="/wiki/EuLisp" title="EuLisp">EuLisp</a></li> <li><a href="/wiki/Franz_Lisp" title="Franz Lisp">Franz Lisp</a>, <a href="/wiki/PC-LISP" title="PC-LISP">PC-LISP</a></li> <li><a href="/wiki/Hy_(programming_language)" title="Hy (programming language)">Hy</a></li> <li><a href="/wiki/Interlisp" title="Interlisp">Interlisp</a></li> <li><a href="/wiki/Knowledge_Engineering_Environment" title="Knowledge Engineering Environment">Knowledge Engineering Environment</a></li> <li><a href="/wiki/*Lisp" title="*Lisp">*Lisp</a></li> <li><a href="/wiki/LeLisp" class="mw-redirect" title="LeLisp">LeLisp</a></li> <li><a href="/wiki/LFE_(programming_language)" title="LFE (programming language)">LFE</a></li> <li><a href="/wiki/Lisp_Machine_Lisp" title="Lisp Machine Lisp">Lisp Machine Lisp</a></li> <li><a href="/wiki/Maclisp" title="Maclisp">Maclisp</a></li> <li><a href="/wiki/MDL_(programming_language)" title="MDL (programming language)">MDL</a></li> <li><a href="/wiki/MLisp" title="MLisp">MLisp</a></li> <li><a href="/wiki/NewLISP" title="NewLISP">newLISP</a></li> <li><a href="/wiki/NIL_(programming_language)" title="NIL (programming language)">NIL</a></li> <li><a href="/wiki/PC-LISP" title="PC-LISP">PC-LISP</a></li> <li><a href="/wiki/Picolisp" class="mw-redirect" title="Picolisp">Picolisp</a></li> <li><a href="/wiki/Portable_Standard_Lisp" title="Portable Standard Lisp">Portable Standard Lisp</a></li> <li><a href="/wiki/RPL_(programming_language)" title="RPL (programming language)">RPL</a></li> <li><a href="/wiki/S-1_Lisp" title="S-1 Lisp">S-1 Lisp</a></li> <li><a href="/wiki/Cadence_SKILL" title="Cadence SKILL">SKILL</a></li> <li><a href="/wiki/Spice_Lisp" title="Spice Lisp">Spice Lisp</a></li> <li><a href="/wiki/Zetalisp" class="mw-redirect" title="Zetalisp">Zetalisp</a></li></ul></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Operating_system" title="Operating system">Operating system</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <li><b><a href="/wiki/Lisp_(programming_language)#Operating_systems" title="Lisp (programming language)">List</a></b></li> <li><a href="/wiki/Common_Lisp_Interface_Manager" title="Common Lisp Interface Manager">Common Lisp Interface Manager</a>, <a href="/wiki/McCLIM" title="McCLIM">McCLIM</a></li> <li><a href="/wiki/Genera_(operating_system)" title="Genera (operating system)">Genera</a></li> <li><a href="/wiki/Scsh" title="Scsh">Scsh</a></li> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Computer_hardware" title="Computer hardware">Hardware</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Lisp_machine" title="Lisp machine">Lisp machine</a> <ul><li><a href="/wiki/TI_Explorer" class="mw-redirect" title="TI Explorer">TI Explorer</a></li></ul></li> <li><a href="/wiki/Space-cadet_keyboard" title="Space-cadet keyboard">Space-cadet keyboard</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Community_of_practice" title="Community of practice">Community<br />of practice</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Technical standards</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Scheme_Requests_for_Implementation" title="Scheme Requests for Implementation">Scheme Requests for Implementation</a></li> <li><a href="/wiki/Common_Lisp_HyperSpec" title="Common Lisp HyperSpec">Common Lisp HyperSpec</a></li> <li><a href="/wiki/X3J13" title="X3J13">X3J13</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Education</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Books</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Common_Lisp_the_Language" title="Common Lisp the Language">Common Lisp the Language</a></li> <li><a href="/wiki/How_to_Design_Programs" title="How to Design Programs">How to Design Programs</a> (HTDP)</li> <li><a href="/wiki/On_Lisp" title="On Lisp">On Lisp</a></li> <li><a href="/wiki/Practical_Common_Lisp" title="Practical Common Lisp">Practical Common Lisp</a></li> <li><a href="/wiki/Structure_and_Interpretation_of_Computer_Programs" title="Structure and Interpretation of Computer Programs">Structure and Interpretation of Computer Programs</a> (SICP)</li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Curriculum</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/ProgramByDesign" title="ProgramByDesign">ProgramByDesign</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Organizations</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Business</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apple_Inc." title="Apple Inc.">Apple Computer</a></li> <li><a href="/wiki/BBN_Technologies" class="mw-redirect" title="BBN Technologies">Bolt, Beranek and Newman</a></li> <li><a href="/wiki/Harlequin_(software_company)" title="Harlequin (software company)">Harlequin</a></li> <li><a href="/wiki/Lucid_Inc." title="Lucid Inc.">Lucid Inc.</a></li> <li><a href="/wiki/Symbolics" title="Symbolics">Symbolics</a></li> <li><a href="/wiki/Xanalys" title="Xanalys">Xanalys</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Education</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Massachusetts_Institute_of_Technology" title="Massachusetts Institute of Technology">Massachusetts Institute of Technology</a> (MIT)</li> <li><a href="/wiki/MIT_Computer_Science_and_Artificial_Intelligence_Laboratory" title="MIT Computer Science and Artificial Intelligence Laboratory">MIT Computer Science and Artificial Intelligence Laboratory</a> (CSAIL)</li> <li><a href="/wiki/Stanford_University_centers_and_institutes#Stanford_Artificial_Intelligence_Laboratory" title="Stanford University centers and institutes">Stanford Artificial Intelligence Laboratory</a></li> <li><a href="/wiki/University_of_California,_Berkeley" title="University of California, Berkeley">University of California, Berkeley</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">People</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Edmund_Berkeley" title="Edmund Berkeley">Edmund Berkeley</a></li> <li><a href="/wiki/Daniel_G._Bobrow" title="Daniel G. Bobrow">Daniel G. Bobrow</a></li> <li><a href="/wiki/William_Clinger_(computer_scientist)" title="William Clinger (computer scientist)">William Clinger</a></li> <li><a href="/wiki/R._Kent_Dybvig" title="R. Kent Dybvig">R. Kent Dybvig</a></li> <li><a href="/wiki/Matthias_Felleisen" title="Matthias Felleisen">Matthias Felleisen</a></li> <li><a href="/wiki/Robert_Bruce_Findler" title="Robert Bruce Findler">Robert Bruce Findler</a></li> <li><a href="/wiki/Matthew_Flatt" title="Matthew Flatt">Matthew Flatt</a></li> <li><a href="/wiki/Phyllis_Fox" title="Phyllis Fox">Phyllis Fox</a></li> <li><a href="/wiki/Paul_Graham_(programmer)" title="Paul Graham (programmer)">Paul Graham</a></li> <li><a href="/wiki/Richard_Greenblatt_(programmer)" title="Richard Greenblatt (programmer)">Richard Greenblatt</a></li> <li>Timothy P. Hart</li> <li><a href="/wiki/Louis_Hodes" title="Louis Hodes">Louis Hodes</a></li> <li>Mike Levin</li> <li><a href="/wiki/David_Luckham" title="David Luckham">David Luckham</a></li> <li><a href="/wiki/John_McCarthy_(computer_scientist)" title="John McCarthy (computer scientist)">John McCarthy</a></li> <li><a href="/wiki/Robert_Tappan_Morris" title="Robert Tappan Morris">Robert Tappan Morris</a></li> <li><a href="/wiki/Joel_Moses" title="Joel Moses">Joel Moses</a></li> <li><a href="/wiki/David_Park_(computer_scientist)" title="David Park (computer scientist)">David Park</a></li> <li><a href="/wiki/Steve_Russell_(computer_scientist)" title="Steve Russell (computer scientist)">Steve Russell</a></li> <li><a href="/wiki/Richard_Stallman" title="Richard Stallman">Richard Stallman</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Scott_Fahlman" title="Scott Fahlman">Scott Fahlman</a></li> <li><a href="/wiki/Richard_P._Gabriel" title="Richard P. Gabriel">Richard P. Gabriel</a></li> <li><a href="/wiki/Philip_Greenspun" title="Philip Greenspun">Philip Greenspun</a> (<a href="/wiki/Greenspun%27s_tenth_rule" title="Greenspun's tenth rule">10th rule</a>)</li> <li><a href="/wiki/David_A._Moon" title="David A. Moon">David A. Moon</a></li> <li><a href="/wiki/Kent_Pitman" title="Kent Pitman">Kent Pitman</a></li> <li><a href="/wiki/Guy_L._Steele_Jr." title="Guy L. Steele Jr.">Guy L. Steele Jr.</a></li> <li><a href="/wiki/Daniel_Weinreb" title="Daniel Weinreb">Daniel Weinreb</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a class="mw-selflink selflink">Scheme</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Matthias_Felleisen" title="Matthias Felleisen">Matthias Felleisen</a></li> <li><a href="/wiki/Shriram_Krishnamurthi" title="Shriram Krishnamurthi">Shriram Krishnamurthi</a></li> <li><a href="/wiki/Guy_L._Steele_Jr." title="Guy L. Steele Jr.">Guy L. Steele Jr.</a></li> <li><a href="/wiki/Gerald_Jay_Sussman" title="Gerald Jay Sussman">Gerald Jay Sussman</a></li> <li><a href="/wiki/Julie_Sussman" class="mw-redirect" title="Julie Sussman">Julie Sussman</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Logo_(programming_language)" title="Logo (programming language)">Logo</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Hal_Abelson" title="Hal Abelson">Hal Abelson</a></li> <li><a href="/wiki/Denison_Bollay" title="Denison Bollay">Denison Bollay</a></li> <li><a href="/wiki/Wally_Feurzeig" title="Wally Feurzeig">Wally Feurzeig</a></li> <li><a href="/wiki/Brian_Harvey_(lecturer)" title="Brian Harvey (lecturer)">Brian Harvey</a></li> <li><a href="/wiki/Seymour_Papert" title="Seymour Papert">Seymour Papert</a></li> <li><a href="/wiki/Mitchel_Resnick" title="Mitchel Resnick">Mitchel Resnick</a></li> <li><a href="/wiki/Cynthia_Solomon" title="Cynthia Solomon">Cynthia Solomon</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/POP-11" title="POP-11">POP</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Rod_Burstall" title="Rod Burstall">Rod Burstall</a></li> <li><a href="/wiki/Robin_Popplestone" title="Robin Popplestone">Robin Popplestone</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div><span class="noviewer" typeof="mw:File"><span title="List-Class article"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/d/db/Symbol_list_class.svg/16px-Symbol_list_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/d/db/Symbol_list_class.svg/23px-Symbol_list_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/d/db/Symbol_list_class.svg/31px-Symbol_list_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <b><a href="/wiki/List_of_Lisp-family_programming_languages" title="List of Lisp-family programming languages">List</a></b> <span class="noviewer" typeof="mw:File"><a href="/wiki/File:Symbol_book_class2.svg" class="mw-file-description" title="Wikipedia book"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/89/Symbol_book_class2.svg/16px-Symbol_book_class2.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/89/Symbol_book_class2.svg/23px-Symbol_book_class2.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/89/Symbol_book_class2.svg/31px-Symbol_book_class2.svg.png 2x" data-file-width="180" data-file-height="185" /></a></span> <b><a href="https://en.wikibooks.org/wiki/Subject:Lisp_programming_language" class="extiw" title="wikibooks:Subject:Lisp programming language">Books</a></b> <span class="noviewer" typeof="mw:File"><span title="Commons page"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/12px-Commons-logo.svg.png" decoding="async" width="12" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/18px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/24px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376" /></span></span> <b><a href="https://commons.wikimedia.org/wiki/Category:Lisp_(programming_language)" class="extiw" title="commons:Category:Lisp (programming language)">Commons</a></b> <span class="noviewer" typeof="mw:File"><span title="Category"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/16px-Symbol_category_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/23px-Symbol_category_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/31px-Symbol_category_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <b><a href="/wiki/Category:Lisp_(programming_language)" title="Category:Lisp (programming language)">Category</a></b> <span class="noviewer" typeof="mw:File"><span title="Category"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/16px-Symbol_category_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/23px-Symbol_category_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/31px-Symbol_category_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <b><a href="/wiki/Category:Lisp_programming_language_family" title="Category:Lisp programming language family">Category</a></b></div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236075235"><style data-mw-deduplicate="TemplateStyles:r1038841319">.mw-parser-output .tooltip-dotted{border-bottom:1px dotted;cursor:help}</style></div><div role="navigation" class="navbox authority-control" aria-label="Navbox" style="padding:3px"><table class="nowraplinks hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Help:Authority_control" title="Help:Authority control">Authority control databases</a>: National <span class="mw-valign-text-top noprint" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q187560#identifiers" title="Edit this at Wikidata"><img alt="Edit this at Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4378962-6">Germany</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh87003834">United States</a></span></li><li><span class="uid"><span class="rt-commentedText tooltip tooltip-dotted" title="Scheme (programovací jazyk)"><a rel="nofollow" class="external text" href="https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=ph117126&CON_LNG=ENG">Czech Republic</a></span></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="http://olduli.nli.org.il/F/?func=find-b&local_base=NLX10&find_code=UID&request=987007539007505171">Israel</a></span></li></ul></div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐7gxbk Cached time: 20241122141022 Cache expiry: 726586 Reduced expiry: true Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 1.071 seconds Real time usage: 2.016 seconds Preprocessor visited node count: 6460/1000000 Post‐expand include size: 211544/2097152 bytes Template argument size: 9851/2097152 bytes Highest expansion depth: 22/100 Expensive parser function count: 42/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 266418/5000000 bytes Lua time usage: 0.561/10.000 seconds Lua memory usage: 7508723/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 1783.015 1 -total 23.53% 419.596 1 Template:Reflist 14.17% 252.575 36 Template:Cite_web 8.82% 157.210 2 Template:Infobox 7.33% 130.647 1 Template:Infobox_programming_language 4.94% 88.112 1 Template:Short_description 4.33% 77.233 9 Template:Navbox 3.67% 65.495 11 Template:Cite_journal 3.60% 64.148 1 Template:Lisp_programming_language 3.31% 58.964 2 Template:Pagetype --> <!-- Saved in parser cache with key enwiki:pcache:idhash:28119-0!canonical and timestamp 20241122141022 and revision id 1251941794. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Scheme_(programming_language)&oldid=1251941794">https://en.wikipedia.org/w/index.php?title=Scheme_(programming_language)&oldid=1251941794</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Scheme_(programming_language)" title="Category:Scheme (programming language)">Scheme (programming language)</a></li><li><a href="/wiki/Category:Academic_programming_languages" title="Category:Academic programming languages">Academic programming languages</a></li><li><a href="/wiki/Category:Dynamically_typed_programming_languages" title="Category:Dynamically typed programming languages">Dynamically typed programming languages</a></li><li><a href="/wiki/Category:Extensible_syntax_programming_languages" title="Category:Extensible syntax programming languages">Extensible syntax programming languages</a></li><li><a href="/wiki/Category:Lisp_programming_language_family" title="Category:Lisp programming language family">Lisp programming language family</a></li><li><a href="/wiki/Category:Multi-paradigm_programming_languages" title="Category:Multi-paradigm programming languages">Multi-paradigm programming languages</a></li><li><a href="/wiki/Category:Programming_languages_created_in_1975" title="Category:Programming languages created in 1975">Programming languages created in 1975</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:CS1_maint:_multiple_names:_authors_list" title="Category:CS1 maint: multiple names: authors list">CS1 maint: multiple names: authors list</a></li><li><a href="/wiki/Category:CS1:_long_volume_value" title="Category:CS1: long volume value">CS1: long volume value</a></li><li><a href="/wiki/Category:Webarchive_template_wayback_links" title="Category:Webarchive template wayback links">Webarchive template wayback links</a></li><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_is_different_from_Wikidata" title="Category:Short description is different from Wikidata">Short description is different from Wikidata</a></li><li><a href="/wiki/Category:All_articles_with_unsourced_statements" title="Category:All articles with unsourced statements">All articles with unsourced statements</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_May_2019" title="Category:Articles with unsourced statements from May 2019">Articles with unsourced statements from May 2019</a></li><li><a href="/wiki/Category:Commons_category_link_is_on_Wikidata" title="Category:Commons category link is on Wikidata">Commons category link is on Wikidata</a></li><li><a href="/wiki/Category:Articles_with_example_Scheme_(programming_language)_code" title="Category:Articles with example Scheme (programming language) code">Articles with example Scheme (programming language) code</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 18 October 2024, at 23:20<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Scheme_(programming_language)&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-vbwr2","wgBackendResponseTime":141,"wgPageParseReport":{"limitreport":{"cputime":"1.071","walltime":"2.016","ppvisitednodes":{"value":6460,"limit":1000000},"postexpandincludesize":{"value":211544,"limit":2097152},"templateargumentsize":{"value":9851,"limit":2097152},"expansiondepth":{"value":22,"limit":100},"expensivefunctioncount":{"value":42,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":266418,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 1783.015 1 -total"," 23.53% 419.596 1 Template:Reflist"," 14.17% 252.575 36 Template:Cite_web"," 8.82% 157.210 2 Template:Infobox"," 7.33% 130.647 1 Template:Infobox_programming_language"," 4.94% 88.112 1 Template:Short_description"," 4.33% 77.233 9 Template:Navbox"," 3.67% 65.495 11 Template:Cite_journal"," 3.60% 64.148 1 Template:Lisp_programming_language"," 3.31% 58.964 2 Template:Pagetype"]},"scribunto":{"limitreport-timeusage":{"value":"0.561","limit":"10.000"},"limitreport-memusage":{"value":7508723,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-7gxbk","timestamp":"20241122141022","ttl":726586,"transientcontent":true}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Scheme (programming language)","url":"https:\/\/en.wikipedia.org\/wiki\/Scheme_(programming_language)","sameAs":"http:\/\/www.wikidata.org\/entity\/Q187560","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q187560","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2001-09-27T00:39:32Z","dateModified":"2024-10-18T23:20:19Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/3\/39\/Lambda_lc.svg","headline":"dialect of the Lisp programming language"}</script> </body> </html>