CINXE.COM
Functional programming - 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>Functional programming - 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":"c92553c9-a12f-45e2-a88f-af38d974613d","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Functional_programming","wgTitle":"Functional programming","wgCurRevisionId":1257148813,"wgRevisionId":1257148813,"wgArticleId":10933,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["CS1 maint: DOI inactive as of November 2024","CS1 French-language sources (fr)","Webarchive template wayback links","Articles with short description","Short description matches Wikidata","All articles with unsourced statements","Articles with unsourced statements from February 2017","Articles with unsourced statements from July 2018","Articles with unsourced statements from June 2014","Articles with unsourced statements from April 2015", "Articles with unsourced statements from August 2022","Articles with hAudio microformats","Spoken articles","Articles with example C code","Functional programming","Programming paradigms"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Functional_programming","wgRelevantArticleId":10933,"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":90000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false, "wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q193076","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.math.styles":"ready","ext.pygments":"ready","ext.tmh.player.styles":"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","ext.tmh.player","ext.scribunto.logs","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.math.styles%7Cext.pygments%2CwikimediaBadges%7Cext.tmh.player.styles%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 name="viewport" content="width=1120"> <meta property="og:title" content="Functional programming - 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/Functional_programming"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Functional_programming&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/Functional_programming"> <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-Functional_programming rootpage-Functional_programming 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=Functional+programming" 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=Functional+programming" 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=Functional+programming" 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=Functional+programming" 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 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#History"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>History</span> </div> </a> <ul id="toc-History-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Concepts" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Concepts"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Concepts</span> </div> </a> <button aria-controls="toc-Concepts-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 Concepts subsection</span> </button> <ul id="toc-Concepts-sublist" class="vector-toc-list"> <li id="toc-First-class_and_higher-order_functions" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#First-class_and_higher-order_functions"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>First-class and higher-order functions</span> </div> </a> <ul id="toc-First-class_and_higher-order_functions-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Pure_functions" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Pure_functions"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span>Pure functions</span> </div> </a> <ul id="toc-Pure_functions-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Recursion" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Recursion"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3</span> <span>Recursion</span> </div> </a> <ul id="toc-Recursion-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Strict_versus_non-strict_evaluation" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Strict_versus_non-strict_evaluation"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4</span> <span>Strict versus non-strict evaluation</span> </div> </a> <ul id="toc-Strict_versus_non-strict_evaluation-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Type_systems" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Type_systems"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.5</span> <span>Type systems</span> </div> </a> <ul id="toc-Type_systems-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Referential_transparency" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Referential_transparency"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.6</span> <span>Referential transparency</span> </div> </a> <ul id="toc-Referential_transparency-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Data_structures" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Data_structures"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.7</span> <span>Data structures</span> </div> </a> <ul id="toc-Data_structures-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Comparison_to_imperative_programming" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Comparison_to_imperative_programming"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Comparison to imperative programming</span> </div> </a> <button aria-controls="toc-Comparison_to_imperative_programming-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 Comparison to imperative programming subsection</span> </button> <ul id="toc-Comparison_to_imperative_programming-sublist" class="vector-toc-list"> <li id="toc-Imperative_vs._functional_programming" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Imperative_vs._functional_programming"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Imperative vs. functional programming</span> </div> </a> <ul id="toc-Imperative_vs._functional_programming-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Simulating_state" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Simulating_state"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Simulating state</span> </div> </a> <ul id="toc-Simulating_state-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Efficiency_issues" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Efficiency_issues"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>Efficiency issues</span> </div> </a> <ul id="toc-Efficiency_issues-sublist" class="vector-toc-list"> <li id="toc-Abstraction_cost" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Abstraction_cost"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3.1</span> <span>Abstraction cost</span> </div> </a> <ul id="toc-Abstraction_cost-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Functional_programming_in_non-functional_languages" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Functional_programming_in_non-functional_languages"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.4</span> <span>Functional programming in non-functional languages</span> </div> </a> <ul id="toc-Functional_programming_in_non-functional_languages-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Comparison_to_logic_programming" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Comparison_to_logic_programming"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Comparison to logic programming</span> </div> </a> <ul id="toc-Comparison_to_logic_programming-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Applications" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Applications"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Applications</span> </div> </a> <button aria-controls="toc-Applications-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 Applications subsection</span> </button> <ul id="toc-Applications-sublist" class="vector-toc-list"> <li id="toc-Text_editors" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Text_editors"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1</span> <span>Text editors</span> </div> </a> <ul id="toc-Text_editors-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Spreadsheets" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Spreadsheets"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.2</span> <span>Spreadsheets</span> </div> </a> <ul id="toc-Spreadsheets-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Microservices" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Microservices"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.3</span> <span>Microservices</span> </div> </a> <ul id="toc-Microservices-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Academia" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Academia"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.4</span> <span>Academia</span> </div> </a> <ul id="toc-Academia-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Industry" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Industry"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.5</span> <span>Industry</span> </div> </a> <ul id="toc-Industry-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Education" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Education"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.6</span> <span>Education</span> </div> </a> <ul id="toc-Education-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Notes_and_references" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Notes_and_references"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Notes and references</span> </div> </a> <ul id="toc-Notes_and_references-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Further_reading" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Further_reading"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</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 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</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">Functional programming</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 53 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-53" 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">53 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%A8%D8%B1%D9%85%D8%AC%D8%A9_%D9%88%D8%B8%D9%8A%D9%81%D9%8A%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-ast mw-list-item"><a href="https://ast.wikipedia.org/wiki/Programaci%C3%B3n_funcional" title="Programación funcional – Asturian" lang="ast" hreflang="ast" data-title="Programación funcional" data-language-autonym="Asturianu" data-language-local-name="Asturian" class="interlanguage-link-target"><span>Asturianu</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%AB%E0%A6%BE%E0%A6%82%E0%A6%B6%E0%A6%A8%E0%A6%AD%E0%A6%BF%E0%A6%A4%E0%A7%8D%E0%A6%A4%E0%A6%BF%E0%A6%95_%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" 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/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D1%8B%D1%8F%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D0%B5_%D0%BF%D1%80%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%B0%D0%B2%D0%B0%D0%BD%D0%BD%D0%B5" title="Функцыянальнае праграмаванне – Belarusian" lang="be" hreflang="be" data-title="Функцыянальнае праграмаванне" 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/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D0%BD%D0%BE_%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="Функционално програмиране – Bulgarian" lang="bg" hreflang="bg" data-title="Функционално програмиране" 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/Programaci%C3%B3_funcional" title="Programació funcional – Catalan" lang="ca" hreflang="ca" data-title="Programació funcional" 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/Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD" title="Funkcionální programování – Czech" lang="cs" hreflang="cs" data-title="Funkcionální programování" 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/Funktionsprogrammering" title="Funktionsprogrammering – Danish" lang="da" hreflang="da" data-title="Funktionsprogrammering" 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/Funktionale_Programmierung" title="Funktionale Programmierung – German" lang="de" hreflang="de" data-title="Funktionale Programmierung" 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/Funktsionaalne_programmeerimine" title="Funktsionaalne programmeerimine – Estonian" lang="et" hreflang="et" data-title="Funktsionaalne programmeerimine" 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/%CE%A3%CF%85%CE%BD%CE%B1%CF%81%CF%84%CE%B7%CF%83%CE%B9%CE%B1%CE%BA%CF%8C%CF%82_%CF%80%CF%81%CE%BF%CE%B3%CF%81%CE%B1%CE%BC%CE%BC%CE%B1%CF%84%CE%B9%CF%83%CE%BC%CF%8C%CF%82" title="Συναρτησιακός προγραμματισμός – Greek" lang="el" hreflang="el" data-title="Συναρτησιακός προγραμματισμός" 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/Programaci%C3%B3n_funcional" title="Programación funcional – Spanish" lang="es" hreflang="es" data-title="Programación funcional" 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-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/Programazio_funtzional" title="Programazio funtzional – Basque" lang="eu" hreflang="eu" data-title="Programazio funtzional" data-language-autonym="Euskara" data-language-local-name="Basque" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%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_%D8%AA%D8%A7%D8%A8%D8%B9%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/Programmation_fonctionnelle" title="Programmation fonctionnelle – French" lang="fr" hreflang="fr" data-title="Programmation fonctionnelle" 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-ga mw-list-item"><a href="https://ga.wikipedia.org/wiki/R%C3%ADomhchl%C3%A1r%C3%BA_feidhmi%C3%BAil" title="Ríomhchlárú feidhmiúil – Irish" lang="ga" hreflang="ga" data-title="Ríomhchlárú feidhmiúil" data-language-autonym="Gaeilge" data-language-local-name="Irish" class="interlanguage-link-target"><span>Gaeilge</span></a></li><li class="interlanguage-link interwiki-gl mw-list-item"><a href="https://gl.wikipedia.org/wiki/Programaci%C3%B3n_funcional" title="Programación funcional – Galician" lang="gl" hreflang="gl" data-title="Programación funcional" data-language-autonym="Galego" data-language-local-name="Galician" class="interlanguage-link-target"><span>Galego</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D" 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/%D5%96%D5%B8%D6%82%D5%B6%D5%AF%D6%81%D5%AB%D5%B8%D5%B6%D5%A1%D5%AC_%D5%AE%D6%80%D5%A1%D5%A3%D6%80%D5%A1%D5%BE%D5%B8%D6%80%D5%B8%D6%82%D5%B4" title="Ֆունկցիոնալ ծրագրավորում – Armenian" lang="hy" hreflang="hy" data-title="Ֆունկցիոնալ ծրագրավորում" 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/Funkcijsko_programiranje" title="Funkcijsko programiranje – Croatian" lang="hr" hreflang="hr" data-title="Funkcijsko programiranje" data-language-autonym="Hrvatski" data-language-local-name="Croatian" class="interlanguage-link-target"><span>Hrvatski</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Pemrograman_fungsional" title="Pemrograman fungsional – Indonesian" lang="id" hreflang="id" data-title="Pemrograman fungsional" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesian" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Programmazione_funzionale" title="Programmazione funzionale – Italian" lang="it" hreflang="it" data-title="Programmazione funzionale" 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/%D7%AA%D7%9B%D7%A0%D7%95%D7%AA_%D7%A4%D7%95%D7%A0%D7%A7%D7%A6%D7%99%D7%95%D7%A0%D7%9C%D7%99" title="תכנות פונקציונלי – Hebrew" lang="he" hreflang="he" data-title="תכנות פונקציונלי" data-language-autonym="עברית" data-language-local-name="Hebrew" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-sw mw-list-item"><a href="https://sw.wikipedia.org/wiki/Uprogramishaji_kikadhia" title="Uprogramishaji kikadhia – Swahili" lang="sw" hreflang="sw" data-title="Uprogramishaji kikadhia" data-language-autonym="Kiswahili" data-language-local-name="Swahili" class="interlanguage-link-target"><span>Kiswahili</span></a></li><li class="interlanguage-link interwiki-la mw-list-item"><a href="https://la.wikipedia.org/wiki/Programmatura_functionalis" title="Programmatura functionalis – Latin" lang="la" hreflang="la" data-title="Programmatura functionalis" data-language-autonym="Latina" data-language-local-name="Latin" class="interlanguage-link-target"><span>Latina</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/Funkcinis_programavimas" title="Funkcinis programavimas – Lithuanian" lang="lt" hreflang="lt" data-title="Funkcinis programavimas" 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/Funkcion%C3%A1lis_programoz%C3%A1s" title="Funkcionális programozás – Hungarian" lang="hu" hreflang="hu" data-title="Funkcionális programozás" 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%AB%E0%B4%99%E0%B5%8D%E0%B4%B7%E0%B4%A3%E0%B5%BD_%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%82%E0%B4%97%E0%B5%8D" 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-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Pengaturcaraan_kefungsian" title="Pengaturcaraan kefungsian – Malay" lang="ms" hreflang="ms" data-title="Pengaturcaraan kefungsian" data-language-autonym="Bahasa Melayu" data-language-local-name="Malay" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-mwl mw-list-item"><a href="https://mwl.wikipedia.org/wiki/Porgrama%C3%A7on_funcional" title="Porgramaçon funcional – Mirandese" lang="mwl" hreflang="mwl" data-title="Porgramaçon funcional" data-language-autonym="Mirandés" data-language-local-name="Mirandese" class="interlanguage-link-target"><span>Mirandés</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/Functioneel_programmeren" title="Functioneel programmeren – Dutch" lang="nl" hreflang="nl" data-title="Functioneel programmeren" 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/%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" title="関数型プログラミング – Japanese" lang="ja" hreflang="ja" data-title="関数型プログラミング" 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/Funksjonell_programmering" title="Funksjonell programmering – Norwegian Bokmål" lang="nb" hreflang="nb" data-title="Funksjonell programmering" 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-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Programowanie_funkcyjne" title="Programowanie funkcyjne – Polish" lang="pl" hreflang="pl" data-title="Programowanie funkcyjne" 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/Programa%C3%A7%C3%A3o_funcional" title="Programação funcional – Portuguese" lang="pt" hreflang="pt" data-title="Programação funcional" 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/Programare_func%C8%9Bional%C4%83" title="Programare funcțională – Romanian" lang="ro" hreflang="ro" data-title="Programare funcțională" 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/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D1%96%D0%BE%D0%BD%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D2%91%D1%80%D0%B0%D0%BC%D0%BE%D0%B2%D0%B0%D0%BD%D1%8F" title="Функціоналне проґрамованя – Rusyn" lang="rue" hreflang="rue" data-title="Функціоналне проґрамованя" 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/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" title="Функциональное программирование – Russian" lang="ru" hreflang="ru" data-title="Функциональное программирование" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/Programimi_funksional" title="Programimi funksional – Albanian" lang="sq" hreflang="sq" data-title="Programimi funksional" data-language-autonym="Shqip" data-language-local-name="Albanian" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Functional_programming" title="Functional programming – Simple English" lang="en-simple" hreflang="en-simple" data-title="Functional programming" 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/Funkcion%C3%A1lne_programovanie" title="Funkcionálne programovanie – Slovak" lang="sk" hreflang="sk" data-title="Funkcionálne programovanie" 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-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D0%BD%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D1%9A%D0%B5" title="Функционално програмирање – Serbian" lang="sr" hreflang="sr" data-title="Функционално програмирање" 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/Funkcijsko_programiranje" title="Funkcijsko programiranje – Serbo-Croatian" lang="sh" hreflang="sh" data-title="Funkcijsko programiranje" 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/Funktionaalinen_ohjelmointi" title="Funktionaalinen ohjelmointi – Finnish" lang="fi" hreflang="fi" data-title="Funktionaalinen ohjelmointi" 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/Funktionell_programmering" title="Funktionell programmering – Swedish" lang="sv" hreflang="sv" data-title="Funktionell programmering" 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%AA%E0%AE%A3%E0%AE%BF%E0%AE%AE%E0%AF%81%E0%AE%B1%E0%AF%88_%E0%AE%A8%E0%AE%BF%E0%AE%B0%E0%AE%B2%E0%AF%8D_%E0%AE%AE%E0%AF%8A%E0%AE%B4%E0%AE%BF" 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-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B9%80%E0%B8%8A%E0%B8%B4%E0%B8%87%E0%B8%9F%E0%B8%B1%E0%B8%87%E0%B8%81%E0%B9%8C%E0%B8%8A%E0%B8%B1%E0%B8%99" title="การเขียนโปรแกรมเชิงฟังก์ชัน – Thai" lang="th" hreflang="th" data-title="การเขียนโปรแกรมเชิงฟังก์ชัน" data-language-autonym="ไทย" data-language-local-name="Thai" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Fonksiyonel_programlama" title="Fonksiyonel programlama – Turkish" lang="tr" hreflang="tr" data-title="Fonksiyonel programlama" 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/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D1%96%D0%B9%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F" title="Функційне програмування – Ukrainian" lang="uk" hreflang="uk" data-title="Функційне програмування" 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/L%E1%BA%ADp_tr%C3%ACnh_h%C3%A0m" title="Lập trình hàm – Vietnamese" lang="vi" hreflang="vi" data-title="Lập trình hàm" 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/%E5%87%BD%E6%95%B8%E5%BC%8F%E7%B7%A8%E7%A8%8B" title="函數式編程 – Cantonese" lang="yue" hreflang="yue" data-title="函數式編程" data-language-autonym="粵語" data-language-local-name="Cantonese" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-diq mw-list-item"><a href="https://diq.wikipedia.org/wiki/Programnay%C4%B1%C5%9Fo_fonksiyonal" title="Programnayışo fonksiyonal – Zazaki" lang="diq" hreflang="diq" data-title="Programnayışo fonksiyonal" data-language-autonym="Zazaki" data-language-local-name="Zazaki" class="interlanguage-link-target"><span>Zazaki</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B" title="函数式编程 – Chinese" lang="zh" hreflang="zh" data-title="函数式编程" 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/Q193076#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/Functional_programming" 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:Functional_programming" 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/Functional_programming"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Functional_programming&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=Functional_programming&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/Functional_programming"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Functional_programming&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=Functional_programming&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/Functional_programming" 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/Functional_programming" 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=Functional_programming&oldid=1257148813" 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=Functional_programming&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=Functional_programming&id=1257148813&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%2FFunctional_programming"><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%2FFunctional_programming"><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=Functional_programming&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=Functional_programming&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:Functional_programming" hreflang="en"><span>Wikimedia Commons</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/Q193076" 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 id="mw-indicator-spoken-icon" class="mw-indicator"><div class="mw-parser-output"><span typeof="mw:File"><a href="/wiki/File:En-Functional_programming.ogg" title="Listen to this article"><img alt="Listen to this article" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/47/Sound-icon.svg/20px-Sound-icon.svg.png" decoding="async" width="20" height="15" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/47/Sound-icon.svg/30px-Sound-icon.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/47/Sound-icon.svg/40px-Sound-icon.svg.png 2x" data-file-width="128" data-file-height="96" /></a></span></div></div> </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">Programming paradigm based on applying and composing functions</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">For subroutine-oriented programming, see <a href="/wiki/Procedural_programming" title="Procedural programming">Procedural programming</a>.</div> <p>In <a href="/wiki/Computer_science" title="Computer science">computer science</a>, <b>functional programming</b> is a <a href="/wiki/Programming_paradigm" title="Programming paradigm">programming paradigm</a> where programs are constructed by <a href="/wiki/Function_application" title="Function application">applying</a> and <a href="/wiki/Function_composition_(computer_science)" title="Function composition (computer science)">composing</a> <a href="/wiki/Function_(computer_science)" class="mw-redirect" title="Function (computer science)">functions</a>. It is a <a href="/wiki/Declarative_programming" title="Declarative programming">declarative programming</a> paradigm in which function definitions are <a href="/wiki/Tree_(data_structure)" class="mw-redirect" title="Tree (data structure)">trees</a> of <a href="/wiki/Expression_(computer_science)" title="Expression (computer science)">expressions</a> that map <a href="/wiki/Value_(computer_science)" title="Value (computer science)">values</a> to other values, rather than a sequence of <a href="/wiki/Imperative_programming" title="Imperative programming">imperative</a> <a href="/wiki/Statement_(computer_science)" title="Statement (computer science)">statements</a> which update the <a href="/wiki/State_(computer_science)" title="State (computer science)">running state</a> of the program. </p><p>In functional programming, functions are treated as <a href="/wiki/First-class_citizen" title="First-class citizen">first-class citizens</a>, meaning that they can be bound to names (including local <a href="/wiki/Identifier_(computer_languages)" title="Identifier (computer languages)">identifiers</a>), passed as <a href="/wiki/Parameter_(computer_programming)" title="Parameter (computer programming)">arguments</a>, and <a href="/wiki/Return_value" class="mw-redirect" title="Return value">returned</a> from other functions, just as any other <a href="/wiki/Data_type" title="Data type">data type</a> can. This allows programs to be written in a <a href="/wiki/Declarative_programming" title="Declarative programming">declarative</a> and <a href="/wiki/Composability" title="Composability">composable</a> style, where small functions are combined in a <a href="/wiki/Modular_programming" title="Modular programming">modular</a> manner. </p><p>Functional programming is sometimes treated as synonymous with <a href="/wiki/Purely_functional_programming" title="Purely functional programming">purely functional programming</a>, a subset of functional programming that treats all functions as <a href="/wiki/Deterministic_system" title="Deterministic system">deterministic</a> mathematical <a href="/wiki/Function_(mathematics)" title="Function (mathematics)">functions</a>, or <a href="/wiki/Pure_function" title="Pure function">pure functions</a>. When a pure function is called with some given arguments, it will always return the same result, and cannot be affected by any mutable <a href="/wiki/State_(computer_science)" title="State (computer science)">state</a> or other <a href="/wiki/Side_effect_(computer_science)" title="Side effect (computer science)">side effects</a>. This is in contrast with impure <a href="/wiki/Procedure_(computer_science)" class="mw-redirect" title="Procedure (computer science)">procedures</a>, common in <a href="/wiki/Imperative_programming" title="Imperative programming">imperative programming</a>, which can have side effects (such as modifying the program's state or taking input from a user). Proponents of purely functional programming claim that by restricting side effects, programs can have fewer <a href="/wiki/Software_bug" title="Software bug">bugs</a>, be easier to <a href="/wiki/Debugging" title="Debugging">debug</a> and <a href="/wiki/Software_testing" title="Software testing">test</a>, and be more suited to <a href="/wiki/Formal_verification" title="Formal verification">formal verification</a>.<sup id="cite_ref-hudak1989_1-0" class="reference"><a href="#cite_note-hudak1989-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-hughesWhyFPMatters_2-0" class="reference"><a href="#cite_note-hughesWhyFPMatters-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> </p><p>Functional programming has its roots in <a href="/wiki/Academia" class="mw-redirect" title="Academia">academia</a>, evolving from the <a href="/wiki/Lambda_calculus" title="Lambda calculus">lambda calculus</a>, a formal system of computation based only on functions. Functional programming has historically been less popular than imperative programming, but many functional languages are seeing use today in industry and education, including <a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a>, <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a>,<sup id="cite_ref-clinger1987_3-0" class="reference"><a href="#cite_note-clinger1987-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-hartheimer1987_4-0" class="reference"><a href="#cite_note-hartheimer1987-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-kidd2007_5-0" class="reference"><a href="#cite_note-kidd2007-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-cleis2006_6-0" class="reference"><a href="#cite_note-cleis2006-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Clojure" title="Clojure">Clojure</a>, <a href="/wiki/Wolfram_Language" title="Wolfram Language">Wolfram Language</a>,<sup id="cite_ref-reference.wolfram.com_7-0" class="reference"><a href="#cite_note-reference.wolfram.com-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Amath-CO_8-0" class="reference"><a href="#cite_note-Amath-CO-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Racket_(programming_language)" title="Racket (programming language)">Racket</a>,<sup id="cite_ref-racket-video-games_9-0" class="reference"><a href="#cite_note-racket-video-games-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a>,<sup id="cite_ref-erlang-faq_10-0" class="reference"><a href="#cite_note-erlang-faq-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-armstrong2007_11-0" class="reference"><a href="#cite_note-armstrong2007-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-larson2009_12-0" class="reference"><a href="#cite_note-larson2009-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Elixir_(programming_language)" title="Elixir (programming language)">Elixir</a>,<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> <a href="/wiki/OCaml" title="OCaml">OCaml</a>,<sup id="cite_ref-minksy2008_14-0" class="reference"><a href="#cite_note-minksy2008-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-leroy2007_15-0" class="reference"><a href="#cite_note-leroy2007-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Haskell" title="Haskell">Haskell</a>,<sup id="cite_ref-haskell-industry_16-0" class="reference"><a href="#cite_note-haskell-industry-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-hudak2007_17-0" class="reference"><a href="#cite_note-hudak2007-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> and <a href="/wiki/F_Sharp_(programming_language)" title="F Sharp (programming language)">F#</a>.<sup id="cite_ref-quantFSharp_18-0" class="reference"><a href="#cite_note-quantFSharp-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-businessAppsFSharp_19-0" class="reference"><a href="#cite_note-businessAppsFSharp-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Lean_(proof_assistant)" title="Lean (proof assistant)">Lean</a> is a functional programming language commonly used for verifying mathematical theorems.<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> Functional programming is also key to some languages that have found success in specific domains, like <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a> in the Web,<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> <a href="/wiki/R_(programming_language)" title="R (programming language)">R</a> in statistics,<sup id="cite_ref-useR_22-0" class="reference"><a href="#cite_note-useR-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Chambers_23-0" class="reference"><a href="#cite_note-Chambers-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> <a href="/wiki/J_(programming_language)" title="J (programming language)">J</a>, <a href="/wiki/K_(programming_language)" title="K (programming language)">K</a> and <a href="/wiki/Q_(programming_language_from_Kx_Systems)" title="Q (programming language from Kx Systems)">Q</a> in financial analysis, and <a href="/wiki/XQuery" title="XQuery">XQuery</a>/<a href="/wiki/XSLT" title="XSLT">XSLT</a> for <a href="/wiki/XML" title="XML">XML</a>.<sup id="cite_ref-Novatchev_24-0" class="reference"><a href="#cite_note-Novatchev-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Mertz_25-0" class="reference"><a href="#cite_note-Mertz-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> Domain-specific declarative languages like <a href="/wiki/SQL" title="SQL">SQL</a> and <a href="/wiki/Lex_(software)" title="Lex (software)">Lex</a>/<a href="/wiki/Yacc" title="Yacc">Yacc</a> use some elements of functional programming, such as not allowing <a href="/wiki/Mutable_object" class="mw-redirect" title="Mutable object">mutable values</a>.<sup id="cite_ref-Chamberlin_Boyce_26-0" class="reference"><a href="#cite_note-Chamberlin_Boyce-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup> In addition, many other programming languages support programming in a functional style or have implemented features from functional programming, such as <a href="/wiki/C%2B%2B11" title="C++11">C++11</a>, <a href="/wiki/C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>,<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a>,<sup id="cite_ref-:0_28-0" class="reference"><a href="#cite_note-:0-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Perl" title="Perl">Perl</a>,<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup> <a href="/wiki/PHP" title="PHP">PHP</a>,<sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a>,<sup id="cite_ref-AutoNT-13_31-0" class="reference"><a href="#cite_note-AutoNT-13-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Go_(programming_language)" title="Go (programming language)">Go</a>,<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a>,<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Raku_(programming_language)" title="Raku (programming language)">Raku</a>,<sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Scala_(programming_language)" title="Scala (programming language)">Scala</a>,<sup id="cite_ref-effective-scala_35-0" class="reference"><a href="#cite_note-effective-scala-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> and <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java (since Java 8)</a>.<sup id="cite_ref-java-8-javadoc_36-0" class="reference"><a href="#cite_note-java-8-javadoc-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup> </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=Functional_programming&action=edit&section=1" title="Edit section: History"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The <a href="/wiki/Lambda_calculus" title="Lambda calculus">lambda calculus</a>, developed in the 1930s by <a href="/wiki/Alonzo_Church" title="Alonzo Church">Alonzo Church</a>, is a <a href="/wiki/Formal_system" title="Formal system">formal system</a> of <a href="/wiki/Computation" title="Computation">computation</a> built from <a href="/wiki/Function_application" title="Function application">function application</a>. In 1937 <a href="/wiki/Alan_Turing" title="Alan Turing">Alan Turing</a> proved that the lambda calculus and <a href="/wiki/Turing_machines" class="mw-redirect" title="Turing machines">Turing machines</a> are equivalent models of computation,<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup> showing that the lambda calculus is <a href="/wiki/Turing_complete" class="mw-redirect" title="Turing complete">Turing complete</a>. Lambda calculus forms the basis of all functional programming languages. An equivalent theoretical formulation, <a href="/wiki/Combinatory_logic" title="Combinatory logic">combinatory logic</a>, was developed by <a href="/wiki/Moses_Sch%C3%B6nfinkel" title="Moses Schönfinkel">Moses Schönfinkel</a> and <a href="/wiki/Haskell_Curry" title="Haskell Curry">Haskell Curry</a> in the 1920s and 1930s.<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup> </p><p>Church later developed a weaker system, the <a href="/wiki/Simply-typed_lambda_calculus" class="mw-redirect" title="Simply-typed lambda calculus">simply-typed lambda calculus</a>, which extended the lambda calculus by assigning a <a href="/wiki/Data_type" title="Data type">data type</a> to all terms.<sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup> This forms the basis for statically typed functional programming. </p><p>The first <a href="/wiki/High-level_programming_language" title="High-level programming language">high-level</a> functional programming language, <a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>, was developed in the late 1950s for the <a href="/wiki/IBM_700/7000_series#Scientific_Architecture" title="IBM 700/7000 series">IBM 700/7000 series</a> of scientific computers by <a href="/wiki/John_McCarthy_(computer_scientist)" title="John McCarthy (computer scientist)">John McCarthy</a> while at <a href="/wiki/Massachusetts_Institute_of_Technology" title="Massachusetts Institute of Technology">Massachusetts Institute of Technology</a> (MIT).<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup> Lisp functions were defined using Church's lambda notation, extended with a label construct to allow <a href="/wiki/Recursion_(computer_science)" title="Recursion (computer science)">recursive</a> functions.<sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup> Lisp first introduced many paradigmatic features of functional programming, though early Lisps were <a href="/wiki/Programming_paradigm#Multi-paradigm" title="Programming paradigm">multi-paradigm languages</a>, and incorporated support for numerous programming styles as new paradigms evolved. Later dialects, such as <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a> and <a href="/wiki/Clojure" title="Clojure">Clojure</a>, and offshoots such as <a href="/wiki/Dylan_(programming_language)" title="Dylan (programming language)">Dylan</a> and <a href="/wiki/Julia_(programming_language)" title="Julia (programming language)">Julia</a>, sought to simplify and rationalise Lisp around a cleanly functional core, while <a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a> was designed to preserve and update the paradigmatic features of the numerous older dialects it replaced.<sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> </p><p><a href="/wiki/Information_Processing_Language" title="Information Processing Language">Information Processing Language</a> (IPL), 1956, is sometimes cited as the first computer-based functional programming language.<sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup> It is an <a href="/wiki/Assembly_language" title="Assembly language">assembly-style language</a> for manipulating lists of symbols. It does have a notion of <i>generator</i>, which amounts to a function that accepts a function as an argument, and, since it is an assembly-level language, code can be data, so IPL can be regarded as having higher-order functions. However, it relies heavily on the mutating list structure and similar imperative features. </p><p><a href="/wiki/Kenneth_E._Iverson" title="Kenneth E. Iverson">Kenneth E. Iverson</a> developed <a href="/wiki/APL_(programming_language)" title="APL (programming language)">APL</a> in the early 1960s, described in his 1962 book <i>A Programming Language</i> (<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><a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/9780471430148" title="Special:BookSources/9780471430148">9780471430148</a>). APL was the primary influence on <a href="/wiki/John_Backus" title="John Backus">John Backus</a>'s <a href="/wiki/FP_(programming_language)" title="FP (programming language)">FP</a>. In the early 1990s, Iverson and <a href="/wiki/Roger_Hui" title="Roger Hui">Roger Hui</a> created <a href="/wiki/J_(programming_language)" title="J (programming language)">J</a>. In the mid-1990s, <a href="/wiki/Arthur_Whitney_(computer_scientist)" title="Arthur Whitney (computer scientist)">Arthur Whitney</a>, who had previously worked with Iverson, created <a href="/wiki/K_(programming_language)" title="K (programming language)">K</a>, which is used commercially in financial industries along with its descendant <a href="/wiki/Q_(programming_language_from_Kx_Systems)" title="Q (programming language from Kx Systems)">Q</a>. </p><p>In the mid-1960s, <a href="/wiki/Peter_Landin" title="Peter Landin">Peter Landin</a> invented <a href="/wiki/SECD_machine" title="SECD machine">SECD machine</a>,<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 first <a href="/wiki/Abstract_machine" title="Abstract machine">abstract machine</a> for a functional programming language,<sup id="cite_ref-45" class="reference"><a href="#cite_note-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup> described a correspondence between <a href="/wiki/ALGOL_60" title="ALGOL 60">ALGOL 60</a> and the <a href="/wiki/Lambda_calculus" title="Lambda calculus">lambda calculus</a>,<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup> and proposed the <a href="/wiki/ISWIM" title="ISWIM">ISWIM</a> programming language.<sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup> </p><p><a href="/wiki/John_Backus" title="John Backus">John Backus</a> presented <a href="/wiki/FP_(programming_language)" title="FP (programming language)">FP</a> in his 1977 <a href="/wiki/Turing_Award" title="Turing Award">Turing Award</a> lecture "Can Programming Be Liberated From the <a href="/wiki/Von_Neumann_architecture" title="Von Neumann architecture">von Neumann</a> Style? A Functional Style and its Algebra of Programs".<sup id="cite_ref-Backus_1977_49-0" class="reference"><a href="#cite_note-Backus_1977-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup> He defines functional programs as being built up in a hierarchical way by means of "combining forms" that allow an "algebra of programs"; in modern language, this means that functional programs follow the <a href="/wiki/Principle_of_compositionality" title="Principle of compositionality">principle of compositionality</a>.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="I dont completely agree with this interpretation of John Backus definition of functional programs, which I feel is widely misunderstood. As he is very sadly no longer alive, we can't ask him, but a reference for this interpretation, especially if it includes a justification, would be very beneficial. (February 2017)">citation needed</span></a></i>]</sup> Backus's paper popularized research into functional programming, though it emphasized <a href="/wiki/Function-level_programming" title="Function-level programming">function-level programming</a> rather than the lambda-calculus style now associated with functional programming. </p><p>The 1973 language <a href="/wiki/ML_(programming_language)" title="ML (programming language)">ML</a> was created by <a href="/wiki/Robin_Milner" title="Robin Milner">Robin Milner</a> at the <a href="/wiki/University_of_Edinburgh" title="University of Edinburgh">University of Edinburgh</a>, and <a href="/wiki/David_Turner_(computer_scientist)" title="David Turner (computer scientist)">David Turner</a> developed the language <a href="/wiki/SASL_(programming_language)" title="SASL (programming language)">SASL</a> at the <a href="/wiki/University_of_St_Andrews" title="University of St Andrews">University of St Andrews</a>. Also in Edinburgh in the 1970s, Burstall and Darlington developed the functional language <a href="/wiki/NPL_(programming_language)" title="NPL (programming language)">NPL</a>.<sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup> NPL was based on <a href="/wiki/Kleene%27s_recursion_theorem" title="Kleene's recursion theorem">Kleene Recursion Equations</a> and was first introduced in their work on program transformation.<sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup> Burstall, MacQueen and Sannella then incorporated the <a href="/wiki/Polymorphism_(computer_science)" title="Polymorphism (computer science)">polymorphic</a> type checking from ML to produce the language <a href="/wiki/Hope_(programming_language)" title="Hope (programming language)">Hope</a>.<sup id="cite_ref-52" class="reference"><a href="#cite_note-52"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup> ML eventually developed into several dialects, the most common of which are now <a href="/wiki/OCaml" title="OCaml">OCaml</a> and <a href="/wiki/Standard_ML" title="Standard ML">Standard ML</a>. </p><p>In the 1970s, <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> developed <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a>, as described in the <a href="/wiki/Lambda_Papers" class="mw-redirect" title="Lambda Papers">Lambda Papers</a> and the 1985 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>. Scheme was the first dialect of lisp to use <a href="/wiki/Lexical_scope" class="mw-redirect" title="Lexical scope">lexical scoping</a> and to require <a href="/wiki/Tail-call_optimization" class="mw-redirect" title="Tail-call optimization">tail-call optimization</a>, features that encourage functional programming. </p><p>In the 1980s, <a href="/wiki/Per_Martin-L%C3%B6f" title="Per Martin-Löf">Per Martin-Löf</a> developed <a href="/wiki/Intuitionistic_type_theory" title="Intuitionistic type theory">intuitionistic type theory</a> (also called <i>constructive</i> type theory), which associated functional programs with <a href="/wiki/Constructive_proof" title="Constructive proof">constructive proofs</a> expressed as <a href="/wiki/Dependent_type" title="Dependent type">dependent types</a>. This led to new approaches to <a href="/wiki/Interactive_theorem_proving" class="mw-redirect" title="Interactive theorem proving">interactive theorem proving</a> and has influenced the development of subsequent functional programming languages.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (July 2018)">citation needed</span></a></i>]</sup> </p><p>The lazy functional language, <a href="/wiki/Miranda_(programming_language)" title="Miranda (programming language)">Miranda</a>, developed by David Turner, initially appeared in 1985 and had a strong influence on <a href="/wiki/Haskell" title="Haskell">Haskell</a>. With Miranda being proprietary, Haskell began with a consensus in 1987 to form an <a href="/wiki/Open_standard" title="Open standard">open standard</a> for functional programming research; implementation releases have been ongoing as of 1990. </p><p>More recently it has found use in niches such as parametric <a href="/wiki/Computer_Aided_Design" class="mw-redirect" title="Computer Aided Design">CAD</a> in the <a href="/wiki/OpenSCAD" title="OpenSCAD">OpenSCAD</a> language built on the <a href="/wiki/CGAL" title="CGAL">CGAL</a> framework, although its restriction on reassigning values (all values are treated as constants) has led to confusion among users who are unfamiliar with functional programming as a concept.<sup id="cite_ref-53" class="reference"><a href="#cite_note-53"><span class="cite-bracket">[</span>53<span class="cite-bracket">]</span></a></sup> </p><p>Functional programming continues to be used in commercial settings.<sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span class="cite-bracket">[</span>54<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-55" class="reference"><a href="#cite_note-55"><span class="cite-bracket">[</span>55<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-56" class="reference"><a href="#cite_note-56"><span class="cite-bracket">[</span>56<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Concepts">Concepts</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=2" title="Edit section: Concepts"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A number of concepts<sup id="cite_ref-57" class="reference"><a href="#cite_note-57"><span class="cite-bracket">[</span>57<span class="cite-bracket">]</span></a></sup> and paradigms are specific to functional programming, and generally foreign to <a href="/wiki/Imperative_programming" title="Imperative programming">imperative programming</a> (including <a href="/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a>). However, programming languages often cater to several programming paradigms, so programmers using "mostly imperative" languages may have utilized some of these concepts.<sup id="cite_ref-58" class="reference"><a href="#cite_note-58"><span class="cite-bracket">[</span>58<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="First-class_and_higher-order_functions">First-class and higher-order functions</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=3" title="Edit section: First-class and higher-order functions"><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 articles: <a href="/wiki/First-class_function" title="First-class function">First-class function</a> and <a href="/wiki/Higher-order_function" title="Higher-order function">Higher-order function</a></div> <p><a href="/wiki/Higher-order_function" title="Higher-order function">Higher-order functions</a> are functions that can either take other functions as arguments or return them as results. In calculus, an example of a higher-order function is the <a href="/wiki/Differential_operator" title="Differential operator">differential operator</a> <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle d/dx}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>d</mi> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mi>d</mi> <mi>x</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle d/dx}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/75a0e680edceb47b7d233535262fcacd931585f8" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.924ex; height:2.843ex;" alt="{\displaystyle d/dx}"></span>, which returns the <a href="/wiki/Derivative" title="Derivative">derivative</a> of a function <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle f}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>f</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle f}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/132e57acb643253e7810ee9702d9581f159a1c61" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:1.279ex; height:2.509ex;" alt="{\displaystyle f}"></span>. </p><p>Higher-order functions are closely related to <a href="/wiki/First-class_function" title="First-class function">first-class functions</a> in that higher-order functions and first-class functions both allow functions as arguments and results of other functions. The distinction between the two is subtle: "higher-order" describes a mathematical concept of functions that operate on other functions, while "first-class" is a computer science term for programming language entities that have no restriction on their use (thus first-class functions can appear anywhere in the program that other first-class entities like numbers can, including as arguments to other functions and as their return values). </p><p>Higher-order functions enable <a href="/wiki/Partial_application" title="Partial application">partial application</a> or <a href="/wiki/Currying" title="Currying">currying</a>, a technique that applies a function to its arguments one at a time, with each application returning a new function that accepts the next argument. This lets a programmer succinctly express, for example, the <a href="/wiki/Successor_function" title="Successor function">successor function</a> as the addition operator partially applied to the <a href="/wiki/Natural_number" title="Natural number">natural number</a> one. </p> <div class="mw-heading mw-heading3"><h3 id="Pure_functions">Pure functions</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=4" title="Edit section: Pure functions"><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/Pure_function" title="Pure function">Pure function</a></div> <p><a href="/wiki/Pure_function" title="Pure function">Pure functions</a> (or expressions) have no <a href="/wiki/Side_effect_(computer_science)" title="Side effect (computer science)">side effects</a> (memory or I/O). This means that pure functions have several useful properties, many of which can be used to optimize the code: </p> <ul><li>If the result of a pure expression is not used, it can be removed without affecting other expressions.</li> <li>If a pure function is called with arguments that cause no side-effects, the result is constant with respect to that argument list (sometimes called <a href="/wiki/Referential_transparency" title="Referential transparency">referential transparency</a> or <a href="/wiki/Idempotence" title="Idempotence">idempotence</a>), i.e., calling the pure function again with the same arguments returns the same result. (This can enable caching optimizations such as <a href="/wiki/Memoization" title="Memoization">memoization</a>.)</li> <li>If there is no data dependency between two pure expressions, their order can be reversed, or they can be performed in <a href="/wiki/Parallelization" class="mw-redirect" title="Parallelization">parallel</a> and they cannot interfere with one another (in other terms, the evaluation of any pure expression is <a href="/wiki/Thread-safe" class="mw-redirect" title="Thread-safe">thread-safe</a>).</li> <li>If the entire language does not allow side-effects, then any evaluation strategy can be used; this gives the compiler freedom to reorder or combine the evaluation of expressions in a program (for example, using <a href="/wiki/Deforestation_(computer_science)" title="Deforestation (computer science)">deforestation</a>).</li></ul> <p>While most compilers for imperative programming languages detect pure functions and perform common-subexpression elimination for pure function calls, they cannot always do this for pre-compiled libraries, which generally do not expose this information, thus preventing optimizations that involve those external functions. Some compilers, such as <a href="/wiki/GNU_Compiler_Collection" title="GNU Compiler Collection">gcc</a>, add extra keywords for a programmer to explicitly mark external functions as pure, to enable such optimizations. <a href="/wiki/Fortran_95" class="mw-redirect" title="Fortran 95">Fortran 95</a> also lets functions be designated <i>pure</i>.<sup id="cite_ref-fortran95_59-0" class="reference"><a href="#cite_note-fortran95-59"><span class="cite-bracket">[</span>59<span class="cite-bracket">]</span></a></sup> C++11 added <code>constexpr</code> keyword with similar semantics. </p> <div class="mw-heading mw-heading3"><h3 id="Recursion">Recursion</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=5" title="Edit section: 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">Main article: <a href="/wiki/Recursion_(computer_science)" title="Recursion (computer science)">Recursion (computer science)</a></div> <p><a href="/wiki/Iteration" title="Iteration">Iteration</a> (looping) in functional languages is usually accomplished via <a href="/wiki/Recursion" title="Recursion">recursion</a>. <a href="/wiki/Recursion_(computer_science)" title="Recursion (computer science)">Recursive functions</a> invoke themselves, letting an operation be repeated until it reaches the <a href="/wiki/Recursion_(computer_science)" title="Recursion (computer science)">base case</a>. In general, recursion requires maintaining a <a href="/wiki/Call_stack" title="Call stack">stack</a>, which consumes space in a linear amount to the depth of recursion. This could make recursion prohibitively expensive to use instead of imperative loops. However, a special form of recursion known as <a href="/wiki/Tail_recursion" class="mw-redirect" title="Tail recursion">tail recursion</a> can be recognized and optimized by a compiler into the same code used to implement iteration in imperative languages. Tail recursion optimization can be implemented by transforming the program into <a href="/wiki/Continuation_passing_style" class="mw-redirect" title="Continuation passing style">continuation passing style</a> during compiling, among other approaches. </p><p>The <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a> language standard requires implementations to support proper tail recursion, meaning they must allow an unbounded number of active tail calls.<sup id="cite_ref-SchemeProperTailRec_60-0" class="reference"><a href="#cite_note-SchemeProperTailRec-60"><span class="cite-bracket">[</span>60<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-61" class="reference"><a href="#cite_note-61"><span class="cite-bracket">[</span>61<span class="cite-bracket">]</span></a></sup> Proper tail recursion is not simply an optimization; it is a language feature that assures users that they can use recursion to express a loop and doing so would be safe-for-space.<sup id="cite_ref-62" class="reference"><a href="#cite_note-62"><span class="cite-bracket">[</span>62<span class="cite-bracket">]</span></a></sup> Moreover, contrary to its name, it accounts for all tail calls, not just tail recursion. While proper tail recursion is usually implemented by turning code into imperative loops, implementations might implement it in other ways. For example, <a href="/wiki/Chicken_(Scheme_implementation)" title="Chicken (Scheme implementation)">Chicken</a> intentionally maintains a stack and lets the <a href="/wiki/Stack_overflow" title="Stack overflow">stack overflow</a>. However, when this happens, its <a href="/wiki/Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collector</a> will claim space back,<sup id="cite_ref-63" class="reference"><a href="#cite_note-63"><span class="cite-bracket">[</span>63<span class="cite-bracket">]</span></a></sup> allowing an unbounded number of active tail calls even though it does not turn tail recursion into a loop. </p><p>Common patterns of recursion can be abstracted away using higher-order functions, with <a href="/wiki/Catamorphism" title="Catamorphism">catamorphisms</a> and <a href="/wiki/Anamorphism" title="Anamorphism">anamorphisms</a> (or "folds" and "unfolds") being the most obvious examples. Such recursion schemes play a role analogous to built-in control structures such as <a href="/wiki/Program_loops" class="mw-redirect" title="Program loops">loops</a> in <a href="/wiki/Imperative_languages" class="mw-redirect" title="Imperative languages">imperative languages</a>. </p><p>Most general purpose functional programming languages allow unrestricted recursion and are <a href="/wiki/Turing_complete" class="mw-redirect" title="Turing complete">Turing complete</a>, which makes the <a href="/wiki/Halting_problem" title="Halting problem">halting problem</a> <a href="/wiki/Undecidable_problem" title="Undecidable problem">undecidable</a>, can cause unsoundness of <a href="/wiki/Equational_reasoning" class="mw-redirect" title="Equational reasoning">equational reasoning</a>, and generally requires the introduction of <a href="/wiki/Inconsistency" class="mw-redirect" title="Inconsistency">inconsistency</a> into the logic expressed by the language's <a href="/wiki/Type_system" title="Type system">type system</a>. Some special purpose languages such as <a href="/wiki/Coq_(software)" title="Coq (software)">Coq</a> allow only <a href="/wiki/Well-founded" class="mw-redirect" title="Well-founded">well-founded</a> recursion and are <a href="/wiki/Strongly_normalizing" class="mw-redirect" title="Strongly normalizing">strongly normalizing</a> (nonterminating computations can be expressed only with infinite streams of values called <a href="/wiki/Codata_(computer_science)" class="mw-redirect" title="Codata (computer science)">codata</a>). As a consequence, these languages fail to be Turing complete and expressing certain functions in them is impossible, but they can still express a wide class of interesting computations while avoiding the problems introduced by unrestricted recursion. Functional programming limited to well-founded recursion with a few other constraints is called <a href="/wiki/Total_functional_programming" title="Total functional programming">total functional programming</a>.<sup id="cite_ref-totalfp_64-0" class="reference"><a href="#cite_note-totalfp-64"><span class="cite-bracket">[</span>64<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Strict_versus_non-strict_evaluation">Strict versus non-strict evaluation</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=6" title="Edit section: Strict versus non-strict 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">Main article: <a href="/wiki/Evaluation_strategy" title="Evaluation strategy">Evaluation strategy</a></div> <p>Functional languages can be categorized by whether they use <i>strict (eager)</i> or <i>non-strict (lazy)</i> evaluation, concepts that refer to how function arguments are processed when an expression is being evaluated. The technical difference is in the <a href="/wiki/Denotational_semantics" title="Denotational semantics">denotational semantics</a> of expressions containing failing or divergent computations. Under strict evaluation, the evaluation of any term containing a failing subterm fails. For example, the expression: </p> <pre>print length([2+1, 3*2, 1/0, 5-4]) </pre> <p>fails under strict evaluation because of the division by zero in the third element of the list. Under lazy evaluation, the length function returns the value 4 (i.e., the number of items in the list), since evaluating it does not attempt to evaluate the terms making up the list. In brief, strict evaluation always fully evaluates function arguments before invoking the function. Lazy evaluation does not evaluate function arguments unless their values are required to evaluate the function call itself. </p><p>The usual implementation strategy for lazy evaluation in functional languages is <a href="/wiki/Graph_reduction" title="Graph reduction">graph reduction</a>.<sup id="cite_ref-65" class="reference"><a href="#cite_note-65"><span class="cite-bracket">[</span>65<span class="cite-bracket">]</span></a></sup> Lazy evaluation is used by default in several pure functional languages, including <a href="/wiki/Miranda_(programming_language)" title="Miranda (programming language)">Miranda</a>, <a href="/wiki/Clean_(programming_language)" title="Clean (programming language)">Clean</a>, and <a href="/wiki/Haskell" title="Haskell">Haskell</a>. </p><p><a href="#CITEREFHughes1984">Hughes 1984</a> argues for lazy evaluation as a mechanism for improving program modularity through <a href="/wiki/Separation_of_concerns" title="Separation of concerns">separation of concerns</a>, by easing independent implementation of producers and consumers of data streams.<sup id="cite_ref-hughesWhyFPMatters_2-1" class="reference"><a href="#cite_note-hughesWhyFPMatters-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Launchbury 1993 describes some difficulties that lazy evaluation introduces, particularly in analyzing a program's storage requirements, and proposes an <a href="/wiki/Operational_semantics" title="Operational semantics">operational semantics</a> to aid in such analysis.<sup id="cite_ref-launchbury1993_66-0" class="reference"><a href="#cite_note-launchbury1993-66"><span class="cite-bracket">[</span>66<span class="cite-bracket">]</span></a></sup> Harper 2009 proposes including both strict and lazy evaluation in the same language, using the language's type system to distinguish them.<sup id="cite_ref-67" class="reference"><a href="#cite_note-67"><span class="cite-bracket">[</span>67<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Type_systems">Type systems</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=7" title="Edit section: Type systems"><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/Type_system" title="Type system">Type system</a></div> <p>Especially since the development of <a href="/wiki/Hindley%E2%80%93Milner_type_inference" class="mw-redirect" title="Hindley–Milner type inference">Hindley–Milner type inference</a> in the 1970s, functional programming languages have tended to use <a href="/wiki/Typed_lambda_calculus" title="Typed lambda calculus">typed lambda calculus</a>, rejecting all invalid programs at compilation time and risking <a href="/wiki/False_positives_and_false_negatives#False_positive_error" title="False positives and false negatives">false positive errors</a>, as opposed to the <a href="/wiki/Untyped_lambda_calculus" class="mw-redirect" title="Untyped lambda calculus">untyped lambda calculus</a>, that accepts all valid programs at compilation time and risks <a href="/wiki/False_positives_and_false_negatives#False_negative_error" title="False positives and false negatives">false negative errors</a>, used in Lisp and its variants (such as <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a>), as they reject all invalid programs at runtime when the information is enough to not reject valid programs. The use of <a href="/wiki/Algebraic_data_type" title="Algebraic data type">algebraic data types</a> makes manipulation of complex data structures convenient; the presence of strong compile-time type checking makes programs more reliable in absence of other reliability techniques like <a href="/wiki/Test-driven_development" title="Test-driven development">test-driven development</a>, while <a href="/wiki/Type_inference" title="Type inference">type inference</a> frees the programmer from the need to manually declare types to the compiler in most cases. </p><p>Some research-oriented functional languages such as <a href="/wiki/Coq_(software)" title="Coq (software)">Coq</a>, <a href="/wiki/Agda_(programming_language)" title="Agda (programming language)">Agda</a>, <a href="/wiki/Lennart_Augustsson" title="Lennart Augustsson">Cayenne</a>, and <a href="/wiki/Epigram_(programming_language)" title="Epigram (programming language)">Epigram</a> are based on <a href="/wiki/Intuitionistic_type_theory" title="Intuitionistic type theory">intuitionistic type theory</a>, which lets types depend on terms. Such types are called <a href="/wiki/Dependent_type" title="Dependent type">dependent types</a>. These type systems do not have decidable type inference and are difficult to understand and program with.<sup id="cite_ref-68" class="reference"><a href="#cite_note-68"><span class="cite-bracket">[</span>68<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-69" class="reference"><a href="#cite_note-69"><span class="cite-bracket">[</span>69<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-70" class="reference"><a href="#cite_note-70"><span class="cite-bracket">[</span>70<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-71" class="reference"><a href="#cite_note-71"><span class="cite-bracket">[</span>71<span class="cite-bracket">]</span></a></sup> But dependent types can express arbitrary propositions in <a href="/wiki/Higher-order_logic" title="Higher-order logic">higher-order logic</a>. Through the <a href="/wiki/Curry%E2%80%93Howard_isomorphism" class="mw-redirect" title="Curry–Howard isomorphism">Curry–Howard isomorphism</a>, then, well-typed programs in these languages become a means of writing formal <a href="/wiki/Mathematical_proof" title="Mathematical proof">mathematical proofs</a> from which a compiler can generate <a href="/wiki/Formal_verification" title="Formal verification">certified code</a>. While these languages are mainly of interest in academic research (including in <a href="/wiki/Formalized_mathematics" class="mw-redirect" title="Formalized mathematics">formalized mathematics</a>), they have begun to be used in engineering as well. <a href="/wiki/Compcert" class="mw-redirect" title="Compcert">Compcert</a> is a <a href="/wiki/Compiler" title="Compiler">compiler</a> for a subset of the language <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a> that is written in Coq and formally verified.<sup id="cite_ref-72" class="reference"><a href="#cite_note-72"><span class="cite-bracket">[</span>72<span class="cite-bracket">]</span></a></sup> </p><p>A limited form of dependent types called <a href="/wiki/Generalized_algebraic_data_type" title="Generalized algebraic data type">generalized algebraic data types</a> (GADT's) can be implemented in a way that provides some of the benefits of dependently typed programming while avoiding most of its inconvenience.<sup id="cite_ref-73" class="reference"><a href="#cite_note-73"><span class="cite-bracket">[</span>73<span class="cite-bracket">]</span></a></sup> GADT's are available in the <a href="/wiki/Glasgow_Haskell_Compiler" title="Glasgow Haskell Compiler">Glasgow Haskell Compiler</a>, in <a href="/wiki/OCaml" title="OCaml">OCaml</a><sup id="cite_ref-74" class="reference"><a href="#cite_note-74"><span class="cite-bracket">[</span>74<span class="cite-bracket">]</span></a></sup> and in <a href="/wiki/Scala_(programming_language)" title="Scala (programming language)">Scala</a>,<sup id="cite_ref-75" class="reference"><a href="#cite_note-75"><span class="cite-bracket">[</span>75<span class="cite-bracket">]</span></a></sup> and have been proposed as additions to other languages including Java and C#.<sup id="cite_ref-76" class="reference"><a href="#cite_note-76"><span class="cite-bracket">[</span>76<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Referential_transparency">Referential transparency</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=8" title="Edit section: Referential transparency"><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/Referential_transparency" title="Referential transparency">Referential transparency</a></div> <p>Functional programs do not have assignment statements, that is, the value of a variable in a functional program never changes once defined. This eliminates any chances of side effects because any variable can be replaced with its actual value at any point of execution. So, functional programs are referentially transparent.<sup id="cite_ref-77" class="reference"><a href="#cite_note-77"><span class="cite-bracket">[</span>77<span class="cite-bracket">]</span></a></sup> </p><p>Consider <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a> assignment statement <code>x=x*10</code>, this changes the value assigned to the variable <code>x</code>. Let us say that the initial value of <code>x</code> was <code>1</code>, then two consecutive evaluations of the variable <code>x</code> yields <code>10</code> and <code>100</code> respectively. Clearly, replacing <code>x=x*10</code> with either <code>10</code> or <code>100</code> gives a program a different meaning, and so the expression <i>is not</i> referentially transparent. In fact, assignment statements are never referentially transparent. </p><p>Now, consider another function such as <code class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><span class="kt">int</span><span class="w"> </span><span class="nf">plusone</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="o">+</span><span class="mi">1</span><span class="p">;}</span></code> <i>is</i> transparent, as it does not implicitly change the input x and thus has no such <a href="/wiki/Side_effect_(computer_science)" title="Side effect (computer science)">side effects</a>. Functional programs exclusively use this type of function and are therefore referentially transparent. </p> <div class="mw-heading mw-heading3"><h3 id="Data_structures">Data structures</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=9" title="Edit section: Data structures"><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/Purely_functional_data_structure" title="Purely functional data structure">Purely functional data structure</a></div> <p>Purely functional <a href="/wiki/Data_structure" title="Data structure">data structures</a> are often represented in a different way to their <a href="/wiki/Imperative_programming" title="Imperative programming">imperative</a> counterparts.<sup id="cite_ref-78" class="reference"><a href="#cite_note-78"><span class="cite-bracket">[</span>78<span class="cite-bracket">]</span></a></sup> For example, the <a href="/wiki/Array_data_structure" class="mw-redirect" title="Array data structure">array</a> with constant access and update times is a basic component of most imperative languages, and many imperative data-structures, such as the <a href="/wiki/Hash_table" title="Hash table">hash table</a> and <a href="/wiki/Binary_heap" title="Binary heap">binary heap</a>, are based on arrays. Arrays can be replaced by <a href="/wiki/Map_(computer_science)" class="mw-redirect" title="Map (computer science)">maps</a> or random access lists, which admit purely functional implementation, but have <a href="/wiki/Logarithm" title="Logarithm">logarithmic</a> access and update times. Purely functional data structures have <a href="/wiki/Persistent_data_structure" title="Persistent data structure">persistence</a>, a property of keeping previous versions of the data structure unmodified. In Clojure, persistent data structures are used as functional alternatives to their imperative counterparts. Persistent vectors, for example, use trees for partial updating. Calling the insert method will result in some but not all nodes being created.<sup id="cite_ref-79" class="reference"><a href="#cite_note-79"><span class="cite-bracket">[</span>79<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Comparison_to_imperative_programming">Comparison to imperative programming</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=10" title="Edit section: Comparison to imperative programming"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Functional programming is very different from <a href="/wiki/Imperative_programming" title="Imperative programming">imperative programming</a>. The most significant differences stem from the fact that functional programming avoids <a href="/wiki/Side_effect_(computer_science)" title="Side effect (computer science)">side effects</a>, which are used in imperative programming to implement state and I/O. Pure functional programming completely prevents side-effects and provides referential transparency. </p><p>Higher-order functions are rarely used in older imperative programming. A traditional imperative program might use a loop to traverse and modify a list. A functional program, on the other hand, would probably use a higher-order "map" function that takes a function and a list, generating and returning a new list by applying the function to each list item. </p> <div class="mw-heading mw-heading3"><h3 id="Imperative_vs._functional_programming">Imperative vs. functional programming</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=11" title="Edit section: Imperative vs. functional programming"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The following two examples (written in <a href="/wiki/JavaScript_(programming_language)" class="mw-redirect" title="JavaScript (programming language)">JavaScript</a>) achieve the same effect: they multiply all even numbers in an array by 10 and add them all, storing the final sum in the variable "result". </p><p>Traditional imperative loop: </p> <div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">numList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="p">,</span><span class="w"> </span><span class="mf">3</span><span class="p">,</span><span class="w"> </span><span class="mf">4</span><span class="p">,</span><span class="w"> </span><span class="mf">5</span><span class="p">,</span><span class="w"> </span><span class="mf">6</span><span class="p">,</span><span class="w"> </span><span class="mf">7</span><span class="p">,</span><span class="w"> </span><span class="mf">8</span><span class="p">,</span><span class="w"> </span><span class="mf">9</span><span class="p">,</span><span class="w"> </span><span class="mf">10</span><span class="p">];</span> <span class="kd">let</span><span class="w"> </span><span class="nx">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span> <span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">numList</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span><span class="w"> </span><span class="nx">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">numList</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="mf">2</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="mf">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">result</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="nx">numList</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mf">10</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> </pre></div> <p>Functional programming with higher-order functions: </p> <div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">const</span><span class="w"> </span><span class="nx">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="p">,</span><span class="w"> </span><span class="mf">3</span><span class="p">,</span><span class="w"> </span><span class="mf">4</span><span class="p">,</span><span class="w"> </span><span class="mf">5</span><span class="p">,</span><span class="w"> </span><span class="mf">6</span><span class="p">,</span><span class="w"> </span><span class="mf">7</span><span class="p">,</span><span class="w"> </span><span class="mf">8</span><span class="p">,</span><span class="w"> </span><span class="mf">9</span><span class="p">,</span><span class="w"> </span><span class="mf">10</span><span class="p">]</span> <span class="w"> </span><span class="p">.</span><span class="nx">filter</span><span class="p">(</span><span class="nx">n</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nx">n</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="mf">2</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="mf">0</span><span class="p">)</span> <span class="w"> </span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">a</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mf">10</span><span class="p">)</span> <span class="w"> </span><span class="p">.</span><span class="nx">reduce</span><span class="p">((</span><span class="nx">a</span><span class="p">,</span><span class="w"> </span><span class="nx">b</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">b</span><span class="p">,</span><span class="w"> </span><span class="mf">0</span><span class="p">);</span> </pre></div><p>Sometimes the abstractions offered by functional programming might lead to development of more robust code that avoids certain issues that might arise when building upon large amount of complex, imperative code, such as <a href="/wiki/Off-by-one_error" title="Off-by-one error">off-by-one errors</a> (see <a href="/wiki/Greenspun%27s_tenth_rule" title="Greenspun's tenth rule">Greenspun's tenth rule</a>). </p><div class="mw-heading mw-heading3"><h3 id="Simulating_state">Simulating state</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=12" title="Edit section: Simulating state"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>There are tasks (for example, maintaining a bank account balance) that often seem most naturally implemented with state. Pure functional programming performs these tasks, and I/O tasks such as accepting user input and printing to the screen, in a different way. </p><p>The pure functional programming language <a href="/wiki/Haskell" title="Haskell">Haskell</a> implements them using <a href="/wiki/Monad_(functional_programming)" title="Monad (functional programming)">monads</a>, derived from <a href="/wiki/Category_theory" title="Category theory">category theory</a>.<sup id="cite_ref-80" class="reference"><a href="#cite_note-80"><span class="cite-bracket">[</span>80<span class="cite-bracket">]</span></a></sup> Monads offer a way to abstract certain types of computational patterns, including (but not limited to) modeling of computations with mutable state (and other side effects such as I/O) in an imperative manner without losing purity. While existing monads may be easy to apply in a program, given appropriate templates and examples, many students find them difficult to understand conceptually, e.g., when asked to define new monads (which is sometimes needed for certain types of libraries).<sup id="cite_ref-81" class="reference"><a href="#cite_note-81"><span class="cite-bracket">[</span>81<span class="cite-bracket">]</span></a></sup> </p><p>Functional languages also simulate states by passing around immutable states. This can be done by making a function accept the state as one of its parameters, and return a new state together with the result, leaving the old state unchanged.<sup id="cite_ref-82" class="reference"><a href="#cite_note-82"><span class="cite-bracket">[</span>82<span class="cite-bracket">]</span></a></sup> </p><p>Impure functional languages usually include a more direct method of managing mutable state. <a href="/wiki/Clojure" title="Clojure">Clojure</a>, for example, uses managed references that can be updated by applying pure functions to the current state. This kind of approach enables mutability while still promoting the use of pure functions as the preferred way to express computations.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (July 2018)">citation needed</span></a></i>]</sup> </p><p>Alternative methods such as <a href="/wiki/Hoare_logic" title="Hoare logic">Hoare logic</a> and <a href="/wiki/Uniqueness_type" title="Uniqueness type">uniqueness</a> have been developed to track side effects in programs. Some modern research languages use <a href="/wiki/Effect_system" title="Effect system">effect systems</a> to make the presence of side effects explicit.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (July 2018)">citation needed</span></a></i>]</sup> </p> <div class="mw-heading mw-heading3"><h3 id="Efficiency_issues">Efficiency issues</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=13" title="Edit section: Efficiency issues"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Functional programming languages are typically less efficient in their use of <a href="/wiki/Central_processing_unit" title="Central processing unit">CPU</a> and memory than imperative languages such as <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a> and <a href="/wiki/Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a>.<sup id="cite_ref-83" class="reference"><a href="#cite_note-83"><span class="cite-bracket">[</span>83<span class="cite-bracket">]</span></a></sup> This is related to the fact that some mutable data structures like arrays have a very straightforward implementation using present hardware. Flat arrays may be accessed very efficiently with deeply pipelined CPUs, prefetched efficiently through caches (with no complex <a href="/w/index.php?title=Pointer_chasing&action=edit&redlink=1" class="new" title="Pointer chasing (page does not exist)">pointer chasing</a>), or handled with SIMD instructions. It is also not easy to create their equally efficient general-purpose immutable counterparts. For purely functional languages, the worst-case slowdown is logarithmic in the number of memory cells used, because mutable memory can be represented by a purely functional data structure with logarithmic access time (such as a balanced tree).<sup id="cite_ref-Spiewak_84-0" class="reference"><a href="#cite_note-Spiewak-84"><span class="cite-bracket">[</span>84<span class="cite-bracket">]</span></a></sup> However, such slowdowns are not universal. For programs that perform intensive numerical computations, functional languages such as <a href="/wiki/OCaml" title="OCaml">OCaml</a> and <a href="/wiki/Clean_(programming_language)" title="Clean (programming language)">Clean</a> are only slightly slower than C according to <a href="/wiki/The_Computer_Language_Benchmarks_Game" title="The Computer Language Benchmarks Game">The Computer Language Benchmarks Game</a>.<sup id="cite_ref-85" class="reference"><a href="#cite_note-85"><span class="cite-bracket">[</span>85<span class="cite-bracket">]</span></a></sup> For programs that handle large <a href="/wiki/Matrix_(mathematics)" title="Matrix (mathematics)">matrices</a> and multidimensional <a href="/wiki/Database" title="Database">databases</a>, <a href="/wiki/Array_programming" title="Array programming">array</a> functional languages (such as <a href="/wiki/J_(programming_language)" title="J (programming language)">J</a> and <a href="/wiki/K_(programming_language)" title="K (programming language)">K</a>) were designed with speed optimizations. </p><p>Immutability of data can in many cases lead to execution efficiency by allowing the compiler to make assumptions that are unsafe in an imperative language, thus increasing opportunities for <a href="/wiki/Inline_expansion" title="Inline expansion">inline expansion</a>.<sup id="cite_ref-86" class="reference"><a href="#cite_note-86"><span class="cite-bracket">[</span>86<span class="cite-bracket">]</span></a></sup> Even if the involved copying that may seem implicit when dealing with persistent immutable data structures might seem computationally costly, some functional programming languages, like <a href="/wiki/Clojure" title="Clojure">Clojure</a> solve this issue by implementing mechanisms for safe memory sharing between <i>formally</i> <i>immutable</i> data.<sup id="cite_ref-87" class="reference"><a href="#cite_note-87"><span class="cite-bracket">[</span>87<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a> distinguishes itself by its approach to data immutability which involves immutable <a href="/wiki/Reference_(computer_science)" title="Reference (computer science)">references</a><sup id="cite_ref-88" class="reference"><a href="#cite_note-88"><span class="cite-bracket">[</span>88<span class="cite-bracket">]</span></a></sup> and a concept called <i>lifetimes.</i><sup id="cite_ref-89" class="reference"><a href="#cite_note-89"><span class="cite-bracket">[</span>89<span class="cite-bracket">]</span></a></sup> </p><p>Immutable data with separation of identity and state and <a href="/wiki/Shared-nothing_architecture" title="Shared-nothing architecture">shared-nothing</a> schemes can also potentially be more well-suited for <a href="/wiki/Parallel_computing" title="Parallel computing">concurrent and parallel</a> programming by the virtue of reducing or eliminating the risk of certain concurrency hazards, since concurrent operations are usually <a href="/wiki/Linearizability" title="Linearizability">atomic</a> and this allows eliminating the need for locks. This is how for example <code>java.util.concurrent</code> classes are implemented, where some of them are immutable variants of the corresponding classes that are not suitable for concurrent use.<sup id="cite_ref-90" class="reference"><a href="#cite_note-90"><span class="cite-bracket">[</span>90<span class="cite-bracket">]</span></a></sup> Functional programming languages often have a concurrency model that instead of shared state and synchronization, leverages <a href="/wiki/Message_passing" title="Message passing">message passing</a> mechanisms (such as the <a href="/wiki/Actor_model" title="Actor model">actor model</a>, where each actor is a container for state, behavior, child actors and a message queue).<sup id="cite_ref-91" class="reference"><a href="#cite_note-91"><span class="cite-bracket">[</span>91<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-92" class="reference"><a href="#cite_note-92"><span class="cite-bracket">[</span>92<span class="cite-bracket">]</span></a></sup> This approach is common in <a href="/wiki/Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a>/<a href="/wiki/Elixir_(programming_language)" title="Elixir (programming language)">Elixir</a> or <a href="/wiki/Akka_(toolkit)" title="Akka (toolkit)">Akka</a>. </p><p><a href="/wiki/Lazy_evaluation" title="Lazy evaluation">Lazy evaluation</a> may also speed up the program, even asymptotically, whereas it may slow it down at most by a constant factor (however, it may introduce <a href="/wiki/Memory_leak" title="Memory leak">memory leaks</a> if used improperly). Launchbury 1993<sup id="cite_ref-launchbury1993_66-1" class="reference"><a href="#cite_note-launchbury1993-66"><span class="cite-bracket">[</span>66<span class="cite-bracket">]</span></a></sup> discusses theoretical issues related to memory leaks from lazy evaluation, and O'Sullivan <i>et al.</i> 2008<sup id="cite_ref-93" class="reference"><a href="#cite_note-93"><span class="cite-bracket">[</span>93<span class="cite-bracket">]</span></a></sup> give some practical advice for analyzing and fixing them. However, the most general implementations of lazy evaluation making extensive use of dereferenced code and data perform poorly on modern processors with deep pipelines and multi-level caches (where a cache miss may cost hundreds of cycles) <sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (June 2014)">citation needed</span></a></i>]</sup>. </p> <div class="mw-heading mw-heading4"><h4 id="Abstraction_cost">Abstraction cost</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=14" title="Edit section: Abstraction cost"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Some functional programming languages might not optimize abstractions such as higher order functions like "<a href="/wiki/Map_(higher-order_function)" title="Map (higher-order function)">map</a>" or "<a href="/wiki/Filter_(higher-order_function)" title="Filter (higher-order function)">filter</a>" as efficiently as the underlying imperative operations. Consider, as an example, the following two ways to check if 5 is an even number in <a href="/wiki/Clojure" title="Clojure">Clojure</a>: </p> <div class="mw-highlight mw-highlight-lang-clojure mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="nf">even?</span><span class="w"> </span><span class="mi">5</span><span class="p">)</span> <span class="p">(</span><span class="nf">.equals</span><span class="w"> </span><span class="p">(</span><span class="nf">mod</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span> </pre></div> <p>When <a href="/wiki/Benchmarking" title="Benchmarking">benchmarked</a> using the <a rel="nofollow" class="external text" href="https://clojars.org/criterium">Criterium</a> tool on a <a href="/wiki/Zen_3" title="Zen 3">Ryzen 7900X</a> GNU/Linux PC in a <a href="/wiki/Leiningen_(software)" title="Leiningen (software)">Leiningen</a> <a href="/wiki/REPL" class="mw-redirect" title="REPL">REPL</a> 2.11.2, running on <a href="/wiki/JVM" class="mw-redirect" title="JVM">Java VM</a> version 22 and Clojure version 1.11.1, the first implementation, which is implemented as: </p> <div class="mw-highlight mw-highlight-lang-clojure mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="kd">defn </span><span class="nv">even?</span> <span class="w"> </span><span class="s">"Returns true if n is even, throws an exception if n is not an integer"</span> <span class="w"> </span><span class="p">{</span><span class="ss">:added</span><span class="w"> </span><span class="s">"1.0"</span> <span class="w"> </span><span class="ss">:static</span><span class="w"> </span><span class="nv">true</span><span class="p">}</span> <span class="w"> </span><span class="p">[</span><span class="nv">n</span><span class="p">]</span><span class="w"> </span><span class="p">(</span><span class="k">if </span><span class="p">(</span><span class="nf">integer?</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">zero? </span><span class="p">(</span><span class="nb">bit-and </span><span class="p">(</span><span class="nf">clojure.lang.RT/uncheckedLongCast</span><span class="w"> </span><span class="nv">n</span><span class="p">)</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">throw</span><span class="w"> </span><span class="p">(</span><span class="nf">IllegalArgumentException.</span><span class="w"> </span><span class="p">(</span><span class="nb">str </span><span class="s">"Argument must be an integer: "</span><span class="w"> </span><span class="nv">n</span><span class="p">)))))</span> </pre></div> <p>has the mean execution time of 4.76 ms, while the second one, in which <code class="mw-highlight mw-highlight-lang-clojure mw-content-ltr" dir="ltr"><span class="nv">.equals</span></code> is a direct invocation of the underlying <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a> method, has a mean execution time of 2.8 μs – roughly 1700 times faster. Part of that can be attributed to the type checking and exception handling involved in the implementation of <code class="mw-highlight mw-highlight-lang-clojure mw-content-ltr" dir="ltr"><span class="nv">even?</span></code>, so let's take for instance the <a rel="nofollow" class="external text" href="https://github.com/samber/lo">lo library</a> for <a href="/wiki/Go_(programming_language)" title="Go (programming language)">Go</a>, which implements various higher-order functions common in functional programming languages using <a href="/wiki/Generic_programming" title="Generic programming">generics</a>. In a benchmark provided by the library's author, calling <code>map</code> is 4% slower than an equivalent <code>for</code> loop and has the same <a href="/wiki/Memory_management" title="Memory management">allocation</a> profile,<sup id="cite_ref-94" class="reference"><a href="#cite_note-94"><span class="cite-bracket">[</span>94<span class="cite-bracket">]</span></a></sup> which can be attributed to various compiler optimizations, such as <a href="/wiki/Inlining" class="mw-redirect" title="Inlining">inlining</a>.<sup id="cite_ref-95" class="reference"><a href="#cite_note-95"><span class="cite-bracket">[</span>95<span class="cite-bracket">]</span></a></sup> </p><p>One distinguishing feature of <a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a> are <i>zero-cost abstractions</i>. This means that using them imposes no additional runtime overhead. This is achieved thanks to the compiler using <a href="/wiki/Loop_unrolling" title="Loop unrolling">loop unrolling</a>, where each iteration of a loop, be it imperative or using iterators, is converted into a standalone <a href="/wiki/Assembly_language" title="Assembly language">Assembly</a> instruction, without the overhead of the loop controlling code. If an iterative operation writes to an array, the resulting array's elements <a href="/wiki/Register_allocation" title="Register allocation">will be stored in specific CPU registers</a>, allowing for <a href="/wiki/Time_complexity" title="Time complexity">constant-time access</a> at runtime.<sup id="cite_ref-96" class="reference"><a href="#cite_note-96"><span class="cite-bracket">[</span>96<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Functional_programming_in_non-functional_languages">Functional programming in non-functional languages</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=15" title="Edit section: Functional programming in non-functional languages"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>It is possible to use a functional style of programming in languages that are not traditionally considered functional languages.<sup id="cite_ref-97" class="reference"><a href="#cite_note-97"><span class="cite-bracket">[</span>97<span class="cite-bracket">]</span></a></sup> For example, both <a href="/wiki/D_(programming_language)" title="D (programming language)">D</a><sup id="cite_ref-98" class="reference"><a href="#cite_note-98"><span class="cite-bracket">[</span>98<span class="cite-bracket">]</span></a></sup> and <a href="/wiki/Fortran_95" class="mw-redirect" title="Fortran 95">Fortran 95</a><sup id="cite_ref-fortran95_59-1" class="reference"><a href="#cite_note-fortran95-59"><span class="cite-bracket">[</span>59<span class="cite-bracket">]</span></a></sup> explicitly support pure functions. </p><p><a href="/wiki/JavaScript" title="JavaScript">JavaScript</a>, <a href="/wiki/Lua_(programming_language)" title="Lua (programming language)">Lua</a>,<sup id="cite_ref-99" class="reference"><a href="#cite_note-99"><span class="cite-bracket">[</span>99<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a> and <a href="/wiki/Go_(programming_language)" title="Go (programming language)">Go</a><sup id="cite_ref-100" class="reference"><a href="#cite_note-100"><span class="cite-bracket">[</span>100<span class="cite-bracket">]</span></a></sup> had <a href="/wiki/First-class_function" title="First-class function">first class functions</a> from their inception.<sup id="cite_ref-101" class="reference"><a href="#cite_note-101"><span class="cite-bracket">[</span>101<span class="cite-bracket">]</span></a></sup> Python had support for "<a href="/wiki/Anonymous_function" title="Anonymous function">lambda</a>", "<a href="/wiki/Map_(higher-order_function)" title="Map (higher-order function)">map</a>", "<a href="/wiki/Fold_(higher-order_function)" title="Fold (higher-order function)">reduce</a>", and "<a href="/wiki/Filter_(higher-order_function)" title="Filter (higher-order function)">filter</a>" in 1994, as well as closures in Python 2.2,<sup id="cite_ref-102" class="reference"><a href="#cite_note-102"><span class="cite-bracket">[</span>102<span class="cite-bracket">]</span></a></sup> though Python 3 relegated "reduce" to the <code>functools</code> standard library module.<sup id="cite_ref-103" class="reference"><a href="#cite_note-103"><span class="cite-bracket">[</span>103<span class="cite-bracket">]</span></a></sup> First-class functions have been introduced into other mainstream languages such as <a href="/wiki/PHP" title="PHP">PHP</a> 5.3, <a href="/wiki/Visual_Basic_9" class="mw-redirect" title="Visual Basic 9">Visual Basic 9</a>, <a href="/wiki/C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a> 3.0, <a href="/wiki/C%2B%2B11" title="C++11">C++11</a>, and <a href="/wiki/Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a>.<sup id="cite_ref-:0_28-1" class="reference"><a href="#cite_note-:0-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup><sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (April 2015)">citation needed</span></a></i>]</sup> </p><p>In PHP, <a href="/wiki/Anonymous_class" class="mw-redirect" title="Anonymous class">anonymous classes</a>, <a href="/wiki/Closure_(computer_science)" class="mw-redirect" title="Closure (computer science)">closures</a> and lambdas are fully supported. Libraries and language extensions for immutable data structures are being developed to aid programming in the functional style. </p><p>In <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>, anonymous classes can sometimes be used to simulate closures;<sup id="cite_ref-104" class="reference"><a href="#cite_note-104"><span class="cite-bracket">[</span>104<span class="cite-bracket">]</span></a></sup> however, anonymous classes are not always proper replacements to closures because they have more limited capabilities.<sup id="cite_ref-105" class="reference"><a href="#cite_note-105"><span class="cite-bracket">[</span>105<span class="cite-bracket">]</span></a></sup> Java 8 supports lambda expressions as a replacement for some anonymous classes.<sup id="cite_ref-106" class="reference"><a href="#cite_note-106"><span class="cite-bracket">[</span>106<span class="cite-bracket">]</span></a></sup> </p><p>In <a href="/wiki/C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>, anonymous classes are not necessary, because closures and lambdas are fully supported. Libraries and language extensions for immutable data structures are being developed to aid programming in the functional style in C#. </p><p>Many <a href="/wiki/Object-oriented" class="mw-redirect" title="Object-oriented">object-oriented</a> <a href="/wiki/Design_pattern_(computer_science)" class="mw-redirect" title="Design pattern (computer science)">design patterns</a> are expressible in functional programming terms: for example, the <a href="/wiki/Strategy_pattern" title="Strategy pattern">strategy pattern</a> simply dictates use of a higher-order function, and the <a href="/wiki/Visitor_(design_pattern)" class="mw-redirect" title="Visitor (design pattern)">visitor</a> pattern roughly corresponds to a <a href="/wiki/Catamorphism" title="Catamorphism">catamorphism</a>, or <a href="/wiki/Fold_(higher-order_function)" title="Fold (higher-order function)">fold</a>. </p><p>Similarly, the idea of immutable data from functional programming is often included in imperative programming languages,<sup id="cite_ref-107" class="reference"><a href="#cite_note-107"><span class="cite-bracket">[</span>107<span class="cite-bracket">]</span></a></sup> for example the tuple in Python, which is an immutable array, and Object.freeze() in JavaScript.<sup id="cite_ref-108" class="reference"><a href="#cite_note-108"><span class="cite-bracket">[</span>108<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Comparison_to_logic_programming">Comparison to logic programming</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=16" title="Edit section: Comparison to logic programming"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Logic_programming" title="Logic programming">Logic programming</a> can be viewed as a generalisation of functional programming, in which functions are a special case of relations.<sup id="cite_ref-109" class="reference"><a href="#cite_note-109"><span class="cite-bracket">[</span>109<span class="cite-bracket">]</span></a></sup> For example, the function, mother(X) = Y, (every X has only one mother Y) can be represented by the relation mother(X, Y). Whereas functions have a strict input-output pattern of arguments, relations can be queried with any pattern of inputs and outputs. Consider the following logic program: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">mother</span><span class="p">(</span><span class="s s-Atom">charles</span><span class="p">,</span> <span class="s s-Atom">elizabeth</span><span class="p">).</span> <span class="nf">mother</span><span class="p">(</span><span class="s s-Atom">harry</span><span class="p">,</span> <span class="s s-Atom">diana</span><span class="p">).</span> </pre></div> <p>The program can be queried, like a functional program, to generate mothers from children: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="s s-Atom">?-</span> <span class="nf">mother</span><span class="p">(</span><span class="s s-Atom">harry</span><span class="p">,</span> <span class="nv">X</span><span class="p">).</span> <span class="nv">X</span> <span class="o">=</span> <span class="s s-Atom">diana</span><span class="p">.</span> <span class="s s-Atom">?-</span> <span class="nf">mother</span><span class="p">(</span><span class="s s-Atom">charles</span><span class="p">,</span> <span class="nv">X</span><span class="p">).</span> <span class="nv">X</span> <span class="o">=</span> <span class="s s-Atom">elizabeth</span><span class="p">.</span> </pre></div> <p>But it can also be queried <i>backwards</i>, to generate children: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="s s-Atom">?-</span> <span class="nf">mother</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="s s-Atom">elizabeth</span><span class="p">).</span> <span class="nv">X</span> <span class="o">=</span> <span class="s s-Atom">charles</span><span class="p">.</span> <span class="s s-Atom">?-</span> <span class="nf">mother</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="s s-Atom">diana</span><span class="p">).</span> <span class="nv">X</span> <span class="o">=</span> <span class="s s-Atom">harry</span><span class="p">.</span> </pre></div> <p>It can even be used to generate all instances of the mother relation: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="s s-Atom">?-</span> <span class="nf">mother</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">).</span> <span class="nv">X</span> <span class="o">=</span> <span class="s s-Atom">charles</span><span class="p">,</span> <span class="nv">Y</span> <span class="o">=</span> <span class="s s-Atom">elizabeth</span><span class="p">.</span> <span class="nv">X</span> <span class="o">=</span> <span class="s s-Atom">harry</span><span class="p">,</span> <span class="nv">Y</span> <span class="o">=</span> <span class="s s-Atom">diana</span><span class="p">.</span> </pre></div> <p>Compared with relational syntax, functional syntax is a more compact notation for nested functions. For example, the definition of maternal grandmother in functional syntax can be written in the nested form: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">maternal_grandmother</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="o">=</span> <span class="nf">mother</span><span class="p">(</span><span class="nf">mother</span><span class="p">(</span><span class="nv">X</span><span class="p">)).</span> </pre></div> <p>The same definition in relational notation needs to be written in the unnested form: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">maternal_grandmother</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">mother</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Z</span><span class="p">),</span> <span class="nf">mother</span><span class="p">(</span><span class="nv">Z</span><span class="p">,</span> <span class="nv">Y</span><span class="p">).</span> </pre></div> <p>Here <code>:-</code> means <i>if</i> and <code> , </code>means <i>and</i>. </p><p>However, the difference between the two representations is simply syntactic. In <a href="/wiki/Ciao_(programming_language)" title="Ciao (programming language)">Ciao</a> Prolog, relations can be nested, like functions in functional programming:<sup id="cite_ref-110" class="reference"><a href="#cite_note-110"><span class="cite-bracket">[</span>110<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">grandparent</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="s s-Atom">:=</span> <span class="nf">parent</span><span class="p">(</span><span class="nf">parent</span><span class="p">(</span><span class="nv">X</span><span class="p">)).</span> <span class="nf">parent</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="s s-Atom">:=</span> <span class="nf">mother</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> <span class="nf">parent</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="s s-Atom">:=</span> <span class="nf">father</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> <span class="nf">mother</span><span class="p">(</span><span class="s s-Atom">charles</span><span class="p">)</span> <span class="s s-Atom">:=</span> <span class="s s-Atom">elizabeth</span><span class="p">.</span> <span class="nf">father</span><span class="p">(</span><span class="s s-Atom">charles</span><span class="p">)</span> <span class="s s-Atom">:=</span> <span class="s s-Atom">phillip</span><span class="p">.</span> <span class="nf">mother</span><span class="p">(</span><span class="s s-Atom">harry</span><span class="p">)</span> <span class="s s-Atom">:=</span> <span class="s s-Atom">diana</span><span class="p">.</span> <span class="nf">father</span><span class="p">(</span><span class="s s-Atom">harry</span><span class="p">)</span> <span class="s s-Atom">:=</span> <span class="s s-Atom">charles</span><span class="p">.</span> <span class="s s-Atom">?-</span> <span class="nf">grandparent</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">).</span> <span class="nv">X</span> <span class="o">=</span> <span class="s s-Atom">harry</span><span class="p">,</span> <span class="nv">Y</span> <span class="o">=</span> <span class="s s-Atom">elizabeth</span><span class="p">.</span> <span class="nv">X</span> <span class="o">=</span> <span class="s s-Atom">harry</span><span class="p">,</span> <span class="nv">Y</span> <span class="o">=</span> <span class="s s-Atom">phillip</span><span class="p">.</span> </pre></div> <p>Ciao transforms the function-like notation into relational form and executes the resulting logic program using the standard Prolog execution strategy. </p> <div class="mw-heading mw-heading2"><h2 id="Applications">Applications</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=17" title="Edit section: Applications"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Text_editors">Text editors</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=18" title="Edit section: Text editors"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Emacs" title="Emacs">Emacs</a>, a highly extensible text editor family uses its own <a href="/wiki/Emacs_Lisp" title="Emacs Lisp">Lisp dialect</a> for writing plugins. The original author of the most popular Emacs implementation, <a href="/wiki/GNU_Emacs" title="GNU Emacs">GNU Emacs</a> and Emacs Lisp, <a href="/wiki/Richard_Stallman" title="Richard Stallman">Richard Stallman</a> considers Lisp one of his favorite programming languages.<sup id="cite_ref-111" class="reference"><a href="#cite_note-111"><span class="cite-bracket">[</span>111<span class="cite-bracket">]</span></a></sup> </p><p><a href="/w/index.php?title=Helix_(text_editor)&action=edit&redlink=1" class="new" title="Helix (text editor) (page does not exist)">Helix</a>, since version 24.03 supports previewing <a href="/wiki/Abstract_syntax_tree" title="Abstract syntax tree">AST</a> as <a href="/wiki/S-expression" title="S-expression">S-expressions</a>, which are also the core feature of the Lisp programming language family.<sup id="cite_ref-112" class="reference"><a href="#cite_note-112"><span class="cite-bracket">[</span>112<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Spreadsheets">Spreadsheets</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=19" title="Edit section: Spreadsheets"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Spreadsheet" title="Spreadsheet">Spreadsheets</a> can be considered a form of pure, <a href="/wiki/Higher-order_function" title="Higher-order function">zeroth-order</a>, strict-evaluation functional programming system.<sup id="cite_ref-Wakeling2007_113-0" class="reference"><a href="#cite_note-Wakeling2007-113"><span class="cite-bracket">[</span>113<span class="cite-bracket">]</span></a></sup> However, spreadsheets generally lack higher-order functions as well as code reuse, and in some implementations, also lack recursion. Several extensions have been developed for spreadsheet programs to enable higher-order and reusable functions, but so far remain primarily academic in nature.<sup id="cite_ref-excel_114-0" class="reference"><a href="#cite_note-excel-114"><span class="cite-bracket">[</span>114<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Microservices">Microservices</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=20" title="Edit section: Microservices"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Due to their <a href="/wiki/Composability" title="Composability">composability</a>, functional programming paradigms can be suitable for <a href="/wiki/Microservices" title="Microservices">microservices</a>-based architectures.<sup id="cite_ref-115" class="reference"><a href="#cite_note-115"><span class="cite-bracket">[</span>115<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Academia">Academia</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=21" title="Edit section: Academia"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Functional programming is an active area of research in the field of <a href="/wiki/Programming_language_theory" title="Programming language theory">programming language theory</a>. There are several <a href="/wiki/Peer-review" class="mw-redirect" title="Peer-review">peer-reviewed</a> publication venues focusing on functional programming, including the <a href="/wiki/International_Conference_on_Functional_Programming" title="International Conference on Functional Programming">International Conference on Functional Programming</a>, the <a href="/wiki/Journal_of_Functional_Programming" title="Journal of Functional Programming">Journal of Functional Programming</a>, and the <a href="/wiki/Symposium_on_Trends_in_Functional_Programming" title="Symposium on Trends in Functional Programming">Symposium on Trends in Functional Programming</a>. </p> <div class="mw-heading mw-heading3"><h3 id="Industry">Industry</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=22" title="Edit section: Industry"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Functional programming has been employed in a wide range of industrial applications. For example, <a href="/wiki/Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a>, which was developed by the <a href="/wiki/Sweden" title="Sweden">Swedish</a> company <a href="/wiki/Ericsson" title="Ericsson">Ericsson</a> in the late 1980s, was originally used to implement <a href="/wiki/Fault_tolerance" title="Fault tolerance">fault-tolerant</a> <a href="/wiki/Telecommunications" title="Telecommunications">telecommunications</a> systems,<sup id="cite_ref-armstrong2007_11-1" class="reference"><a href="#cite_note-armstrong2007-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> but has since become popular for building a range of applications at companies such as <a href="/wiki/Nortel" title="Nortel">Nortel</a>, <a href="/wiki/Facebook" title="Facebook">Facebook</a>, <a href="/wiki/%C3%89lectricit%C3%A9_de_France" title="Électricité de France">Électricité de France</a> and <a href="/wiki/WhatsApp" title="WhatsApp">WhatsApp</a>.<sup id="cite_ref-erlang-faq_10-1" class="reference"><a href="#cite_note-erlang-faq-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-larson2009_12-1" class="reference"><a href="#cite_note-larson2009-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-116" class="reference"><a href="#cite_note-116"><span class="cite-bracket">[</span>116<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Sim-Diasca_117-0" class="reference"><a href="#cite_note-Sim-Diasca-117"><span class="cite-bracket">[</span>117<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-whatsapp.blog.2012_118-0" class="reference"><a href="#cite_note-whatsapp.blog.2012-118"><span class="cite-bracket">[</span>118<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a>, a dialect of <a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>, was used as the basis for several applications on early <a href="/wiki/Apple_Macintosh" class="mw-redirect" title="Apple Macintosh">Apple Macintosh</a> computers<sup id="cite_ref-clinger1987_3-1" class="reference"><a href="#cite_note-clinger1987-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-hartheimer1987_4-1" class="reference"><a href="#cite_note-hartheimer1987-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> and has been applied to problems such as training-<a href="/wiki/Computer_simulation" title="Computer simulation">simulation software</a><sup id="cite_ref-kidd2007_5-1" class="reference"><a href="#cite_note-kidd2007-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> and <a href="/wiki/Telescope" title="Telescope">telescope</a> control.<sup id="cite_ref-cleis2006_6-1" class="reference"><a href="#cite_note-cleis2006-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> <a href="/wiki/OCaml" title="OCaml">OCaml</a>, which was introduced in the mid-1990s, has seen commercial use in areas such as financial analysis,<sup id="cite_ref-minksy2008_14-1" class="reference"><a href="#cite_note-minksy2008-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Software_driver" class="mw-redirect" title="Software driver">driver</a> verification, industrial <a href="/wiki/Robot" title="Robot">robot</a> programming and static analysis of <a href="/wiki/Embedded_software" title="Embedded software">embedded software</a>.<sup id="cite_ref-leroy2007_15-1" class="reference"><a href="#cite_note-leroy2007-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Haskell" title="Haskell">Haskell</a>, though initially intended as a research language,<sup id="cite_ref-hudak2007_17-1" class="reference"><a href="#cite_note-hudak2007-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> has also been applied in areas such as aerospace systems, hardware design and web programming.<sup id="cite_ref-haskell-industry_16-1" class="reference"><a href="#cite_note-haskell-industry-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-hudak2007_17-2" class="reference"><a href="#cite_note-hudak2007-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> </p><p>Other functional programming languages that have seen use in industry include <a href="/wiki/Scala_(programming_language)" title="Scala (programming language)">Scala</a>,<sup id="cite_ref-119" class="reference"><a href="#cite_note-119"><span class="cite-bracket">[</span>119<span class="cite-bracket">]</span></a></sup> <a href="/wiki/F_Sharp_(programming_language)" title="F Sharp (programming language)">F#</a>,<sup id="cite_ref-quantFSharp_18-1" class="reference"><a href="#cite_note-quantFSharp-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-businessAppsFSharp_19-1" class="reference"><a href="#cite_note-businessAppsFSharp-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Wolfram_Language" title="Wolfram Language">Wolfram Language</a>,<sup id="cite_ref-reference.wolfram.com_7-1" class="reference"><a href="#cite_note-reference.wolfram.com-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>,<sup id="cite_ref-120" class="reference"><a href="#cite_note-120"><span class="cite-bracket">[</span>120<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Standard_ML" title="Standard ML">Standard ML</a><sup id="cite_ref-121" class="reference"><a href="#cite_note-121"><span class="cite-bracket">[</span>121<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-122" class="reference"><a href="#cite_note-122"><span class="cite-bracket">[</span>122<span class="cite-bracket">]</span></a></sup> and Clojure.<sup id="cite_ref-123" class="reference"><a href="#cite_note-123"><span class="cite-bracket">[</span>123<span class="cite-bracket">]</span></a></sup> Scala has been widely used in <a href="/wiki/Data_science" title="Data science">Data science</a>,<sup id="cite_ref-124" class="reference"><a href="#cite_note-124"><span class="cite-bracket">[</span>124<span class="cite-bracket">]</span></a></sup> while <a href="/wiki/ClojureScript" class="mw-redirect" title="ClojureScript">ClojureScript</a>,<sup id="cite_ref-125" class="reference"><a href="#cite_note-125"><span class="cite-bracket">[</span>125<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Elm_(programming_language)" title="Elm (programming language)">Elm</a><sup id="cite_ref-126" class="reference"><a href="#cite_note-126"><span class="cite-bracket">[</span>126<span class="cite-bracket">]</span></a></sup> or <a href="/wiki/PureScript" title="PureScript">PureScript</a><sup id="cite_ref-127" class="reference"><a href="#cite_note-127"><span class="cite-bracket">[</span>127<span class="cite-bracket">]</span></a></sup> are some of the functional frontend programming languages used in production. <a href="/wiki/Elixir_(programming_language)" title="Elixir (programming language)">Elixir</a>'s Phoenix framework is also used by some relatively popular commercial projects, such as <a href="/wiki/Font_Awesome" title="Font Awesome">Font Awesome</a> or <a href="/wiki/Allegro_Platform" class="mw-redirect" title="Allegro Platform">Allegro</a> (one of the biggest e-commerce platforms in Poland)<sup id="cite_ref-128" class="reference"><a href="#cite_note-128"><span class="cite-bracket">[</span>128<span class="cite-bracket">]</span></a></sup>'s classified ads platform <i>Allegro Lokalnie.</i><sup id="cite_ref-129" class="reference"><a href="#cite_note-129"><span class="cite-bracket">[</span>129<span class="cite-bracket">]</span></a></sup> </p><p>Functional "platforms" have been popular in finance for risk analytics (particularly with large investment banks). Risk factors are coded as functions that form interdependent graphs (categories) to measure correlations in market shifts, similar in manner to <a href="/wiki/Gr%C3%B6bner_basis" title="Gröbner basis">Gröbner basis</a> optimizations but also for regulatory frameworks such as <a href="/wiki/Comprehensive_Capital_Analysis_and_Review" title="Comprehensive Capital Analysis and Review">Comprehensive Capital Analysis and Review</a>. Given the use of OCaml and <a href="/wiki/Caml" title="Caml">Caml</a> variations in finance, these systems are sometimes considered related to a <a href="/wiki/Categorical_abstract_machine" title="Categorical abstract machine">categorical abstract machine</a>. Functional programming is heavily influenced by <a href="/wiki/Category_theory" title="Category theory">category theory</a>.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (August 2022)">citation needed</span></a></i>]</sup> </p> <div class="mw-heading mw-heading3"><h3 id="Education">Education</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=23" title="Edit section: Education"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Many <a href="/wiki/University" title="University">universities</a> teach functional programming.<sup id="cite_ref-oxfordFP_130-0" class="reference"><a href="#cite_note-oxfordFP-130"><span class="cite-bracket">[</span>130<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-imperialFP_131-0" class="reference"><a href="#cite_note-imperialFP-131"><span class="cite-bracket">[</span>131<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-nottinghamFP_132-0" class="reference"><a href="#cite_note-nottinghamFP-132"><span class="cite-bracket">[</span>132<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-mitFP_133-0" class="reference"><a href="#cite_note-mitFP-133"><span class="cite-bracket">[</span>133<span class="cite-bracket">]</span></a></sup> Some treat it as an introductory programming concept<sup id="cite_ref-mitFP_133-1" class="reference"><a href="#cite_note-mitFP-133"><span class="cite-bracket">[</span>133<span class="cite-bracket">]</span></a></sup> while others first teach imperative programming methods.<sup id="cite_ref-nottinghamFP_132-1" class="reference"><a href="#cite_note-nottinghamFP-132"><span class="cite-bracket">[</span>132<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-61A_134-0" class="reference"><a href="#cite_note-61A-134"><span class="cite-bracket">[</span>134<span class="cite-bracket">]</span></a></sup> </p><p>Outside of computer science, functional programming is used to teach problem-solving, algebraic and geometric concepts.<sup id="cite_ref-bootstrapworld_135-0" class="reference"><a href="#cite_note-bootstrapworld-135"><span class="cite-bracket">[</span>135<span class="cite-bracket">]</span></a></sup> It has also been used to teach classical mechanics, as in the book <i><a href="/wiki/Structure_and_Interpretation_of_Classical_Mechanics" title="Structure and Interpretation of Classical Mechanics">Structure and Interpretation of Classical Mechanics</a></i>. </p><p>In particular, <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a> has been a relatively popular choice for teaching programming for years.<sup id="cite_ref-136" class="reference"><a href="#cite_note-136"><span class="cite-bracket">[</span>136<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-137" class="reference"><a href="#cite_note-137"><span class="cite-bracket">[</span>137<span class="cite-bracket">]</span></a></sup> </p> <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=Functional_programming&action=edit&section=24" 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><a href="/wiki/Eager_evaluation" class="mw-redirect" title="Eager evaluation">Eager evaluation</a></li> <li><a href="/wiki/Functional_reactive_programming" title="Functional reactive programming">Functional reactive programming</a></li> <li><a href="/wiki/Inductive_functional_programming" class="mw-redirect" title="Inductive functional programming">Inductive functional programming</a></li> <li><a href="/wiki/List_of_functional_programming_languages" class="mw-redirect" title="List of functional programming languages">List of functional programming languages</a></li> <li><a href="/wiki/List_of_functional_programming_topics" title="List of functional programming topics">List of functional programming topics</a></li> <li><a href="/wiki/Nested_function" title="Nested function">Nested function</a></li> <li><a href="/wiki/Purely_functional_programming" title="Purely functional programming">Purely functional programming</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Notes_and_references">Notes and references</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Functional_programming&action=edit&section=25" title="Edit section: Notes and 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-lower-alpha"> </div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239543626"><div class="reflist"> <div class="mw-references-wrap mw-references-columns"><ol class="references"> <li id="cite_note-hudak1989-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-hudak1989_1-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHudak1989" class="citation journal cs1"><a href="/wiki/Paul_Hudak" title="Paul Hudak">Hudak, Paul</a> (September 1989). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160131083528/http://www.dbnet.ece.ntua.gr/~adamo/languages/books/p359-hudak.pdf">"Conception, evolution, and application of functional programming languages"</a> <span class="cs1-format">(PDF)</span>. <i>ACM Computing Surveys</i>. <b>21</b> (3): 359–411. <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%2F72551.72554">10.1145/72551.72554</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:207637854">207637854</a>. Archived from <a rel="nofollow" class="external text" href="http://www.dbnet.ece.ntua.gr/~adamo/languages/books/p359-hudak.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2016-01-31<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-08-10</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+Computing+Surveys&rft.atitle=Conception%2C+evolution%2C+and+application+of+functional+programming+languages&rft.volume=21&rft.issue=3&rft.pages=359-411&rft.date=1989-09&rft_id=info%3Adoi%2F10.1145%2F72551.72554&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A207637854%23id-name%3DS2CID&rft.aulast=Hudak&rft.aufirst=Paul&rft_id=http%3A%2F%2Fwww.dbnet.ece.ntua.gr%2F~adamo%2Flanguages%2Fbooks%2Fp359-hudak.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-hughesWhyFPMatters-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-hughesWhyFPMatters_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-hughesWhyFPMatters_2-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="CITEREFHughes1984" class="citation web cs1"><a href="/wiki/John_Hughes_(computer_scientist)" title="John Hughes (computer scientist)">Hughes, John</a> (1984). <a rel="nofollow" class="external text" href="http://www.cse.chalmers.se/~rjmh/Papers/whyfp.html">"Why Functional Programming Matters"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Why+Functional+Programming+Matters&rft.date=1984&rft.aulast=Hughes&rft.aufirst=John&rft_id=http%3A%2F%2Fwww.cse.chalmers.se%2F~rjmh%2FPapers%2Fwhyfp.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-clinger1987-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-clinger1987_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-clinger1987_3-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="CITEREFClinger1987" class="citation journal cs1">Clinger, Will (1987). <a rel="nofollow" class="external text" href="http://www.mactech.com/articles/mactech/Vol.03/03.12/Multitasking/index.html">"MultiTasking and MacScheme"</a>. <i>MacTech</i>. <b>3</b> (12)<span class="reference-accessdate">. Retrieved <span class="nowrap">2008-08-28</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=MacTech&rft.atitle=MultiTasking+and+MacScheme&rft.volume=3&rft.issue=12&rft.date=1987&rft.aulast=Clinger&rft.aufirst=Will&rft_id=http%3A%2F%2Fwww.mactech.com%2Farticles%2Fmactech%2FVol.03%2F03.12%2FMultitasking%2Findex.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-hartheimer1987-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-hartheimer1987_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-hartheimer1987_4-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="CITEREFHartheimer1987" class="citation journal cs1">Hartheimer, Anne (1987). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20110629183752/http://www.mactech.com/articles/mactech/Vol.03/03.1/SchemeWindows/index.html">"Programming a Text Editor in MacScheme+Toolsmith"</a>. <i>MacTech</i>. <b>3</b> (1). Archived from <a rel="nofollow" class="external text" href="http://www.mactech.com/articles/mactech/Vol.03/03.1/SchemeWindows/index.html">the original</a> on 2011-06-29<span class="reference-accessdate">. Retrieved <span class="nowrap">2008-08-28</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=MacTech&rft.atitle=Programming+a+Text+Editor+in+MacScheme%2BToolsmith&rft.volume=3&rft.issue=1&rft.date=1987&rft.aulast=Hartheimer&rft.aufirst=Anne&rft_id=http%3A%2F%2Fwww.mactech.com%2Farticles%2Fmactech%2FVol.03%2F03.1%2FSchemeWindows%2Findex.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-kidd2007-5"><span class="mw-cite-backlink">^ <a href="#cite_ref-kidd2007_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-kidd2007_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 id="CITEREFKidd" class="citation conference cs1">Kidd, Eric. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20101221110947/http://cufp.galois.com/2007/abstracts.html#EricKidd"><i>Terrorism Response Training in Scheme</i></a>. CUFP 2007. Archived from <a rel="nofollow" class="external text" href="http://cufp.galois.com/2007/abstracts.html#EricKidd">the original</a> on 2010-12-21<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-26</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=Terrorism+Response+Training+in+Scheme&rft.aulast=Kidd&rft.aufirst=Eric&rft_id=http%3A%2F%2Fcufp.galois.com%2F2007%2Fabstracts.html%23EricKidd&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-cleis2006-6"><span class="mw-cite-backlink">^ <a href="#cite_ref-cleis2006_6-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-cleis2006_6-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="CITEREFCleis" class="citation conference cs1">Cleis, Richard. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100527100429/http://cufp.galois.com/2006/abstracts.html#RichardCleis"><i>Scheme in Space</i></a>. CUFP 2006. Archived from <a rel="nofollow" class="external text" href="http://cufp.galois.com/2006/abstracts.html#RichardCleis">the original</a> on 2010-05-27<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-26</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=Scheme+in+Space&rft.aulast=Cleis&rft.aufirst=Richard&rft_id=http%3A%2F%2Fcufp.galois.com%2F2006%2Fabstracts.html%23RichardCleis&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-reference.wolfram.com-7"><span class="mw-cite-backlink">^ <a href="#cite_ref-reference.wolfram.com_7-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-reference.wolfram.com_7-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://reference.wolfram.com/language/guide/FunctionalProgramming.html">"Wolfram Language Guide: Functional Programming"</a>. 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">2015-08-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=Wolfram+Language+Guide%3A+Functional+Programming&rft.date=2015&rft_id=http%3A%2F%2Freference.wolfram.com%2Flanguage%2Fguide%2FFunctionalProgramming.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-Amath-CO-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-Amath-CO_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="https://web.archive.org/web/20071113175801/http://amath.colorado.edu/computing/mmm/funcproc.html">"Functional vs. Procedural Programming Language"</a>. <i>Department of Applied Math</i>. University of Colorado. Archived from <a rel="nofollow" class="external text" href="http://amath.colorado.edu/computing/mmm/funcproc.html">the original</a> on 2007-11-13<span class="reference-accessdate">. Retrieved <span class="nowrap">2006-08-28</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Department+of+Applied+Math&rft.atitle=Functional+vs.+Procedural+Programming+Language&rft_id=http%3A%2F%2Famath.colorado.edu%2Fcomputing%2Fmmm%2Ffuncproc.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-racket-video-games-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-racket-video-games_9-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://web.archive.org/web/20121215014637/http://www.gameenginebook.com/gdc09-statescripting-uncharted2.pdf">"State-Based Scripting in Uncharted 2"</a> <span class="cs1-format">(PDF)</span>. Archived from <a rel="nofollow" class="external text" href="http://www.gameenginebook.com/gdc09-statescripting-uncharted2.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2012-12-15<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-08-08</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=State-Based+Scripting+in+Uncharted+2&rft_id=http%3A%2F%2Fwww.gameenginebook.com%2Fgdc09-statescripting-uncharted2.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-erlang-faq-10"><span class="mw-cite-backlink">^ <a href="#cite_ref-erlang-faq_10-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-erlang-faq_10-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://erlang.org/faq/introduction.html#idp32582608">"Who uses Erlang for product development?"</a>. <i>Frequently asked questions about Erlang</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-04-27</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Frequently+asked+questions+about+Erlang&rft.atitle=Who+uses+Erlang+for+product+development%3F&rft_id=http%3A%2F%2Ferlang.org%2Ffaq%2Fintroduction.html%23idp32582608&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-armstrong2007-11"><span class="mw-cite-backlink">^ <a href="#cite_ref-armstrong2007_11-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-armstrong2007_11-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="CITEREFArmstrong2007" class="citation conference cs1">Armstrong, Joe (June 2007). "A history of Erlang". <i>Proceedings of the third ACM SIGPLAN conference on History of programming languages</i>. Third ACM SIGPLAN Conference on History of Programming Languages. San Diego, California. <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%2F1238844.1238850">10.1145/1238844.1238850</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/9781595937667" title="Special:BookSources/9781595937667"><bdi>9781595937667</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.atitle=A+history+of+Erlang&rft.btitle=Proceedings+of+the+third+ACM+SIGPLAN+conference+on+History+of+programming+languages&rft.place=San+Diego%2C+California&rft.date=2007-06&rft_id=info%3Adoi%2F10.1145%2F1238844.1238850&rft.isbn=9781595937667&rft.aulast=Armstrong&rft.aufirst=Joe&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-larson2009-12"><span class="mw-cite-backlink">^ <a href="#cite_ref-larson2009_12-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-larson2009_12-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="CITEREFLarson2009" class="citation journal cs1">Larson, Jim (March 2009). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1467247.1467263">"Erlang for concurrent programming"</a>. <i>Communications of the ACM</i>. <b>52</b> (3): 48. <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.1145%2F1467247.1467263">10.1145/1467247.1467263</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:524392">524392</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Communications+of+the+ACM&rft.atitle=Erlang+for+concurrent+programming&rft.volume=52&rft.issue=3&rft.pages=48&rft.date=2009-03&rft_id=info%3Adoi%2F10.1145%2F1467247.1467263&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A524392%23id-name%3DS2CID&rft.aulast=Larson&rft.aufirst=Jim&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F1467247.1467263&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</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://elixir-lang.org/">"The Elixir Programming Language"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-02-14</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+Elixir+Programming+Language&rft_id=https%3A%2F%2Felixir-lang.org%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-minksy2008-14"><span class="mw-cite-backlink">^ <a href="#cite_ref-minksy2008_14-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-minksy2008_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="CITEREFMinskyWeeks2008" class="citation journal cs1">Minsky, Yaron; Weeks, Stephen (July 2008). "Caml Trading — experiences with functional programming on Wall Street". <i>Journal of Functional Programming</i>. <b>18</b> (4): 553–564. <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%2FS095679680800676X">10.1017/S095679680800676X</a></span> (inactive 1 November 2024). <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:30955392">30955392</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=Caml+Trading+%E2%80%94+experiences+with+functional+programming+on+Wall+Street&rft.volume=18&rft.issue=4&rft.pages=553-564&rft.date=2008-07&rft_id=info%3Adoi%2F10.1017%2FS095679680800676X&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A30955392%23id-name%3DS2CID&rft.aulast=Minsky&rft.aufirst=Yaron&rft.au=Weeks%2C+Stephen&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span><span class="cs1-maint citation-comment"><code class="cs1-code">{{<a href="/wiki/Template:Cite_journal" title="Template:Cite journal">cite journal</a>}}</code>: CS1 maint: DOI inactive as of November 2024 (<a href="/wiki/Category:CS1_maint:_DOI_inactive_as_of_November_2024" title="Category:CS1 maint: DOI inactive as of November 2024">link</a>)</span></span> </li> <li id="cite_note-leroy2007-15"><span class="mw-cite-backlink">^ <a href="#cite_ref-leroy2007_15-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-leroy2007_15-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="CITEREFLeroy" class="citation conference cs1">Leroy, Xavier. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20111008170929/http://cufp.galois.com/2007/slides/XavierLeroy.pdf"><i>Some uses of Caml in Industry</i></a> <span class="cs1-format">(PDF)</span>. CUFP 2007. Archived from <a rel="nofollow" class="external text" href="http://cufp.galois.com/2007/slides/XavierLeroy.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2011-10-08<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-26</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=Some+uses+of+Caml+in+Industry&rft.aulast=Leroy&rft.aufirst=Xavier&rft_id=http%3A%2F%2Fcufp.galois.com%2F2007%2Fslides%2FXavierLeroy.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-haskell-industry-16"><span class="mw-cite-backlink">^ <a href="#cite_ref-haskell-industry_16-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-haskell-industry_16-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://www.haskell.org/haskellwiki/Haskell_in_industry">"Haskell in industry"</a>. <i>Haskell Wiki</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-26</span></span>. <q>Haskell has a diverse range of use commercially, from aerospace and defense, to finance, to web startups, hardware design firms and lawnmower manufacturers.</q></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Haskell+Wiki&rft.atitle=Haskell+in+industry&rft_id=http%3A%2F%2Fwww.haskell.org%2Fhaskellwiki%2FHaskell_in_industry&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-hudak2007-17"><span class="mw-cite-backlink">^ <a href="#cite_ref-hudak2007_17-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-hudak2007_17-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-hudak2007_17-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHudakHughesJonesWadler2007" class="citation conference cs1"><a href="/wiki/Paul_Hudak" title="Paul Hudak">Hudak, Paul</a>; Hughes, J.; Jones, S. P.; Wadler, P. (June 2007). <a rel="nofollow" class="external text" href="http://dl.acm.org/citation.cfm?doid=1238844.1238856"><i>A history of Haskell: being lazy with class</i></a>. Third ACM SIGPLAN Conference on History of Programming Languages. San Diego, California. <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%2F1238844.1238856">10.1145/1238844.1238856</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2013-09-26</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=A+history+of+Haskell%3A+being+lazy+with+class&rft.place=San+Diego%2C+California&rft.date=2007-06&rft_id=info%3Adoi%2F10.1145%2F1238844.1238856&rft.aulast=Hudak&rft.aufirst=Paul&rft.au=Hughes%2C+J.&rft.au=Jones%2C+S.+P.&rft.au=Wadler%2C+P.&rft_id=http%3A%2F%2Fdl.acm.org%2Fcitation.cfm%3Fdoid%3D1238844.1238856&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-quantFSharp-18"><span class="mw-cite-backlink">^ <a href="#cite_ref-quantFSharp_18-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-quantFSharp_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="CITEREFMansell2008" class="citation conference cs1">Mansell, Howard (2008). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150708125937/http://cufp.galois.com/2008/abstracts.html#MansellHoward"><i>Quantitative Finance in F#</i></a>. CUFP 2008. Archived from <a rel="nofollow" class="external text" href="http://cufp.galois.com/2008/abstracts.html#MansellHoward">the original</a> on 2015-07-08<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=Quantitative+Finance+in+F%23&rft.date=2008&rft.aulast=Mansell&rft.aufirst=Howard&rft_id=http%3A%2F%2Fcufp.galois.com%2F2008%2Fabstracts.html%23MansellHoward&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-businessAppsFSharp-19"><span class="mw-cite-backlink">^ <a href="#cite_ref-businessAppsFSharp_19-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-businessAppsFSharp_19-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="CITEREFPeake2009" class="citation conference cs1">Peake, Alex (2009). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20091017070140/http://cufp.galois.com/2009/abstracts.html#AlexPeakeAdamGranicz"><i>The First Substantial Line of Business Application in F#</i></a>. CUFP 2009. Archived from <a rel="nofollow" class="external text" href="http://cufp.galois.com/2009/abstracts.html#AlexPeakeAdamGranicz">the original</a> on 2009-10-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=The+First+Substantial+Line+of+Business+Application+in+F%23&rft.date=2009&rft.aulast=Peake&rft.aufirst=Alex&rft_id=http%3A%2F%2Fcufp.galois.com%2F2009%2Fabstracts.html%23AlexPeakeAdamGranicz&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" 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="CITEREFde_MouraUllrich2021" class="citation conference cs1">de Moura, Leonardo; Ullrich, Sebastian (July 2021). "The Lean 4 Theorem Prover and Programming Language". <i>Lecture Notes in Artificial Intelligence</i>. Conference on Automated Deduction. Vol. 12699. pp. 625–635. <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.1007%2F978-3-030-79876-5_37">10.1007/978-3-030-79876-5_37</a></span>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1611-3349">1611-3349</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.atitle=The+Lean+4+Theorem+Prover+and+Programming+Language&rft.btitle=Lecture+Notes+in+Artificial+Intelligence&rft.pages=625-635&rft.date=2021-07&rft_id=info%3Adoi%2F10.1007%2F978-3-030-79876-5_37&rft.issn=1611-3349&rft.aulast=de+Moura&rft.aufirst=Leonardo&rft.au=Ullrich%2C+Sebastian&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" 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="CITEREFBanz2017" class="citation web cs1">Banz, Matt (2017-06-27). <a rel="nofollow" class="external text" href="https://opensource.com/article/17/6/functional-javascript">"An introduction to functional programming in JavaScript"</a>. <i>Opensource.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-01-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Opensource.com&rft.atitle=An+introduction+to+functional+programming+in+JavaScript&rft.date=2017-06-27&rft.aulast=Banz&rft.aufirst=Matt&rft_id=https%3A%2F%2Fopensource.com%2Farticle%2F17%2F6%2Ffunctional-javascript&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-useR-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-useR_22-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.r-project.org/useR-2006/program.html">"The useR! 2006 conference schedule includes papers on the commercial use of R"</a>. R-project.org. 2006-06-08<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-06-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=The+useR%21+2006+conference+schedule+includes+papers+on+the+commercial+use+of+R&rft.pub=R-project.org&rft.date=2006-06-08&rft_id=http%3A%2F%2Fwww.r-project.org%2FuseR-2006%2Fprogram.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-Chambers-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-Chambers_23-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFChambers1998" class="citation book cs1"><a href="/wiki/John_Chambers_(programmer)" class="mw-redirect" title="John Chambers (programmer)">Chambers, John M.</a> (1998). <i>Programming with Data: A Guide to the S Language</i>. Springer Verlag. pp. 67–70. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-387-98503-9" title="Special:BookSources/978-0-387-98503-9"><bdi>978-0-387-98503-9</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Programming+with+Data%3A+A+Guide+to+the+S+Language&rft.pages=67-70&rft.pub=Springer+Verlag&rft.date=1998&rft.isbn=978-0-387-98503-9&rft.aulast=Chambers&rft.aufirst=John+M.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-Novatchev-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-Novatchev_24-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFNovatchev" class="citation web cs1">Novatchev, Dimitre. <a rel="nofollow" class="external text" href="http://fxsl.sourceforge.net/articles/FuncProg/Functional%20Programming.html">"The Functional Programming Language XSLT — A proof through examples"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">May 27,</span> 2006</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+Functional+Programming+Language+XSLT+%E2%80%94+A+proof+through+examples&rft.aulast=Novatchev&rft.aufirst=Dimitre&rft_id=http%3A%2F%2Ffxsl.sourceforge.net%2Farticles%2FFuncProg%2FFunctional%2520Programming.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-Mertz-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-Mertz_25-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMertz" class="citation web cs1">Mertz, David. <a rel="nofollow" class="external text" href="http://gnosis.cx/publish/programming/xml_models_fp.html">"XML Programming Paradigms (part four): Functional Programming approached to XML processing"</a>. <i>IBM developerWorks</i><span class="reference-accessdate">. Retrieved <span class="nowrap">May 27,</span> 2006</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=IBM+developerWorks&rft.atitle=XML+Programming+Paradigms+%28part+four%29%3A+Functional+Programming+approached+to+XML+processing&rft.aulast=Mertz&rft.aufirst=David&rft_id=http%3A%2F%2Fgnosis.cx%2Fpublish%2Fprogramming%2Fxml_models_fp.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-Chamberlin_Boyce-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-Chamberlin_Boyce_26-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFChamberlinBoyce1974" class="citation journal cs1"><a href="/wiki/Donald_D._Chamberlin" title="Donald D. Chamberlin">Chamberlin, Donald D.</a>; <a href="/wiki/Raymond_F._Boyce" title="Raymond F. Boyce">Boyce, Raymond F.</a> (1974). "SEQUEL: A structured English query language". <i>Proceedings of the 1974 ACM SIGFIDET</i>: 249–264.</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+1974+ACM+SIGFIDET&rft.atitle=SEQUEL%3A+A+structured+English+query+language&rft.pages=249-264&rft.date=1974&rft.aulast=Chamberlin&rft.aufirst=Donald+D.&rft.au=Boyce%2C+Raymond+F.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://ghostarchive.org/varchive/youtube/20211030/gvyTB4aMI4o"><i>Functional Programming with C# - Simon Painter - NDC Oslo 2020</i></a>, 8 August 2021, archived from <a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=gvyTB4aMI4o">the original</a> on 2021-10-30<span class="reference-accessdate">, retrieved <span class="nowrap">2021-10-23</span></span></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Functional+Programming+with+C%23+-+Simon+Painter+-+NDC+Oslo+2020&rft.date=2021-08-08&rft_id=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DgvyTB4aMI4o&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-:0-28"><span class="mw-cite-backlink">^ <a href="#cite_ref-:0_28-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:0_28-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="https://kotlinlang.org/docs/tutorials/kotlin-for-py/functional-programming.html">"Functional programming - Kotlin Programming Language"</a>. <i>Kotlin</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2019-05-01</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Kotlin&rft.atitle=Functional+programming+-+Kotlin+Programming+Language&rft_id=https%3A%2F%2Fkotlinlang.org%2Fdocs%2Ftutorials%2Fkotlin-for-py%2Ffunctional-programming.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDominus2005" class="citation book cs1"><a href="/wiki/Mark_Jason_Dominus" class="mw-redirect" title="Mark Jason Dominus">Dominus, Mark J.</a> (2005). <a href="/wiki/Higher-Order_Perl" title="Higher-Order Perl"><i>Higher-Order Perl</i></a>. <a href="/wiki/Morgan_Kaufmann" class="mw-redirect" title="Morgan Kaufmann">Morgan Kaufmann</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-1-55860-701-9" title="Special:BookSources/978-1-55860-701-9"><bdi>978-1-55860-701-9</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Higher-Order+Perl&rft.pub=Morgan+Kaufmann&rft.date=2005&rft.isbn=978-1-55860-701-9&rft.aulast=Dominus&rft.aufirst=Mark+J.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHolywell2014" class="citation book cs1">Holywell, Simon (2014). <i>Functional Programming in PHP</i>. php[architect]. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/9781940111056" title="Special:BookSources/9781940111056"><bdi>9781940111056</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Functional+Programming+in+PHP&rft.pub=php%5Barchitect%5D&rft.date=2014&rft.isbn=9781940111056&rft.aulast=Holywell&rft.aufirst=Simon&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-AutoNT-13-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-AutoNT-13_31-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFThe_Cain_Gang_Ltd." class="citation web cs1">The Cain Gang Ltd. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090530030205/http://www.python.org/community/pycon/dc2004/papers/24/metaclasses-pycon.pdf">"Python Metaclasses: Who? Why? When?"</a> <span class="cs1-format">(PDF)</span>. Archived from <a rel="nofollow" class="external text" href="https://www.python.org/community/pycon/dc2004/papers/24/metaclasses-pycon.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 30 May 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">27 June</span> 2009</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Python+Metaclasses%3A+Who%3F+Why%3F+When%3F&rft.au=The+Cain+Gang+Ltd.&rft_id=https%3A%2F%2Fwww.python.org%2Fcommunity%2Fpycon%2Fdc2004%2Fpapers%2F24%2Fmetaclasses-pycon.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</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.youtube.com/watch?v=wqs8n5Uk5OM">"GopherCon 2020: Dylan Meeus - Functional Programming with Go"</a>. <i>YouTube</i>. 22 December 2020.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=YouTube&rft.atitle=GopherCon+2020%3A+Dylan+Meeus+-+Functional+Programming+with+Go&rft.date=2020-12-22&rft_id=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dwqs8n5Uk5OM&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</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://doc.rust-lang.org/book/ch13-00-functional-features.html">"Functional Language Features: Iterators and Closures - The Rust Programming Language"</a>. <i>doc.rust-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-01-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=doc.rust-lang.org&rft.atitle=Functional+Language+Features%3A+Iterators+and+Closures+-+The+Rust+Programming+Language&rft_id=https%3A%2F%2Fdoc.rust-lang.org%2Fbook%2Fch13-00-functional-features.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFVanderbauwhede2020" class="citation web cs1">Vanderbauwhede, Wim (18 July 2020). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200728013926/https://wimvanderbauwhede.github.io/articles/decluttering-with-functional-programming/">"Cleaner code with functional programming"</a>. Archived from <a rel="nofollow" class="external text" href="https://wimvanderbauwhede.github.io/articles/decluttering-with-functional-programming/">the original</a> on 28 July 2020<span class="reference-accessdate">. Retrieved <span class="nowrap">6 October</span> 2020</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Cleaner+code+with+functional+programming&rft.date=2020-07-18&rft.aulast=Vanderbauwhede&rft.aufirst=Wim&rft_id=https%3A%2F%2Fwimvanderbauwhede.github.io%2Farticles%2Fdecluttering-with-functional-programming%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-effective-scala-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-effective-scala_35-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://web.archive.org/web/20120619075044/http://twitter.github.com/effectivescala/?sd">"Effective Scala"</a>. <i>Scala Wiki</i>. Archived from <a rel="nofollow" class="external text" href="https://twitter.github.com/effectivescala/?sd">the original</a> on 2012-06-19<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-02-21</span></span>. <q>Effective Scala.</q></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Scala+Wiki&rft.atitle=Effective+Scala&rft_id=https%3A%2F%2Ftwitter.github.com%2Feffectivescala%2F%3Fsd&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-java-8-javadoc-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-java-8-javadoc_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="https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html">"Documentation for package java.util.function since Java 8 (also known as Java 1.8)"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-06-16</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Documentation+for+package+java.util.function+since+Java+8+%28also+known+as+Java+1.8%29&rft_id=https%3A%2F%2Fdocs.oracle.com%2Fjavase%2F8%2Fdocs%2Fapi%2Fjava%2Futil%2Ffunction%2Fpackage-summary.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFTuring1937" class="citation journal cs1">Turing, A. M. (1937). "Computability and λ-definability". <i>The Journal of Symbolic Logic</i>. <b>2</b> (4). Cambridge University Press: 153–163. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.2307%2F2268280">10.2307/2268280</a>. <a href="/wiki/JSTOR_(identifier)" class="mw-redirect" title="JSTOR (identifier)">JSTOR</a> <a rel="nofollow" class="external text" href="https://www.jstor.org/stable/2268280">2268280</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:2317046">2317046</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=The+Journal+of+Symbolic+Logic&rft.atitle=Computability+and+%CE%BB-definability&rft.volume=2&rft.issue=4&rft.pages=153-163&rft.date=1937&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A2317046%23id-name%3DS2CID&rft_id=https%3A%2F%2Fwww.jstor.org%2Fstable%2F2268280%23id-name%3DJSTOR&rft_id=info%3Adoi%2F10.2307%2F2268280&rft.aulast=Turing&rft.aufirst=A.+M.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHaskell_Brooks_CurryRobert_Feys1958" class="citation book cs1">Haskell Brooks Curry; Robert Feys (1958). <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/combinatorylogic0002curr"><i>Combinatory Logic</i></a></span>. North-Holland Publishing Company<span class="reference-accessdate">. Retrieved <span class="nowrap">10 February</span> 2013</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Combinatory+Logic&rft.pub=North-Holland+Publishing+Company&rft.date=1958&rft.au=Haskell+Brooks+Curry&rft.au=Robert+Feys&rft_id=https%3A%2F%2Farchive.org%2Fdetails%2Fcombinatorylogic0002curr&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFChurch1940" class="citation journal cs1"><a href="/wiki/Alonzo_Church" title="Alonzo Church">Church, A.</a> (1940). "A Formulation of the Simple Theory of Types". <i>Journal of Symbolic Logic</i>. <b>5</b> (2): 56–68. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.2307%2F2266170">10.2307/2266170</a>. <a href="/wiki/JSTOR_(identifier)" class="mw-redirect" title="JSTOR (identifier)">JSTOR</a> <a rel="nofollow" class="external text" href="https://www.jstor.org/stable/2266170">2266170</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:15889861">15889861</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+Symbolic+Logic&rft.atitle=A+Formulation+of+the+Simple+Theory+of+Types&rft.volume=5&rft.issue=2&rft.pages=56-68&rft.date=1940&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A15889861%23id-name%3DS2CID&rft_id=https%3A%2F%2Fwww.jstor.org%2Fstable%2F2266170%23id-name%3DJSTOR&rft_id=info%3Adoi%2F10.2307%2F2266170&rft.aulast=Church&rft.aufirst=A.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMcCarthy1978" class="citation conference cs1"><a href="/wiki/John_McCarthy_(computer_scientist)" title="John McCarthy (computer scientist)">McCarthy, John</a> (June 1978). <a rel="nofollow" class="external text" href="http://jmc.stanford.edu/articles/lisp/lisp.pdf"><i>History of Lisp</i></a> <span class="cs1-format">(PDF)</span>. <i>History of Programming Languages</i>. Los Angeles, CA. pp. 173–185. <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%2F800025.808387">10.1145/800025.808387</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=conference&rft.jtitle=History+of+Programming+Languages&rft.atitle=History+of+Lisp&rft.pages=173-185&rft.date=1978-06&rft_id=info%3Adoi%2F10.1145%2F800025.808387&rft.aulast=McCarthy&rft.aufirst=John&rft_id=http%3A%2F%2Fjmc.stanford.edu%2Farticles%2Flisp%2Flisp.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFJohn_McCarthy1960" class="citation journal cs1"><a href="/wiki/John_McCarthy_(computer_scientist)" title="John McCarthy (computer scientist)">John McCarthy</a> (1960). <a rel="nofollow" class="external text" href="http://jmc.stanford.edu/articles/recursive/recursive.pdf">"Recursive functions of symbolic expressions and their computation by machine, Part I."</a> <span class="cs1-format">(PDF)</span>. <i>Communications of the ACM</i>. <b>3</b> (4). ACM New York, NY, US: 184–195. <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%2F367177.367199">10.1145/367177.367199</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:1489409">1489409</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Communications+of+the+ACM&rft.atitle=Recursive+functions+of+symbolic+expressions+and+their+computation+by+machine%2C+Part+I.&rft.volume=3&rft.issue=4&rft.pages=184-195&rft.date=1960&rft_id=info%3Adoi%2F10.1145%2F367177.367199&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A1489409%23id-name%3DS2CID&rft.au=John+McCarthy&rft_id=http%3A%2F%2Fjmc.stanford.edu%2Farticles%2Frecursive%2Frecursive.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGuy_L._SteeleRichard_P._Gabriel1996" class="citation book cs1">Guy L. Steele; Richard P. Gabriel (February 1996). "The evolution of Lisp". <a rel="nofollow" class="external text" href="http://dreamsongs.com/Files/HOPL2-Uncut.pdf"><i>History of programming languages---II</i></a> <span class="cs1-format">(PDF)</span>. pp. 233–330. <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%2F234286.1057818">10.1145/234286.1057818</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-201-89502-5" title="Special:BookSources/978-0-201-89502-5"><bdi>978-0-201-89502-5</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:47047140">47047140</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=The+evolution+of+Lisp&rft.btitle=History+of+programming+languages---II&rft.pages=233-330&rft.date=1996-02&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A47047140%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1145%2F234286.1057818&rft.isbn=978-0-201-89502-5&rft.au=Guy+L.+Steele&rft.au=Richard+P.+Gabriel&rft_id=http%3A%2F%2Fdreamsongs.com%2FFiles%2FHOPL2-Uncut.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text">The memoir of <a href="/wiki/Herbert_A._Simon" title="Herbert A. Simon">Herbert A. Simon</a> (1991), <i>Models of My Life</i> pp.189-190 <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/0-465-04640-1" title="Special:BookSources/0-465-04640-1">0-465-04640-1</a> claims that he, Al Newell, and Cliff Shaw are "...commonly adjudged to be the parents of [the] artificial intelligence [field]," for writing <a href="/wiki/Logic_Theorist" title="Logic Theorist">Logic Theorist</a>, a program that proved theorems from <i><a href="/wiki/Principia_Mathematica" title="Principia Mathematica">Principia Mathematica</a></i> automatically. To accomplish this, they had to invent a language and a paradigm that, viewed retrospectively, embeds functional programming.</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 id="CITEREFLandin1964" class="citation journal cs1">Landin, Peter J. (1964). <a rel="nofollow" class="external text" href="https://doi.org/10.1093%2Fcomjnl%2F6.4.308">"The mechanical evaluation of expressions"</a>. <i><a href="/wiki/The_Computer_Journal" title="The Computer Journal">The Computer Journal</a></i>. <b>6</b> (4). <a href="/wiki/British_Computer_Society" title="British Computer Society">British Computer Society</a>: 308–320. <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.1093%2Fcomjnl%2F6.4.308">10.1093/comjnl/6.4.308</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=The+Computer+Journal&rft.atitle=The+mechanical+evaluation+of+expressions&rft.volume=6&rft.issue=4&rft.pages=308-320&rft.date=1964&rft_id=info%3Adoi%2F10.1093%2Fcomjnl%2F6.4.308&rft.aulast=Landin&rft.aufirst=Peter+J.&rft_id=https%3A%2F%2Fdoi.org%2F10.1093%252Fcomjnl%252F6.4.308&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-45">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDiehlHartelSestoft2000" class="citation book cs1">Diehl, Stephan; Hartel, Pieter; Sestoft, Peter (2000). "Abstract machines for programming language implementation". <i>Future Generation Computer Systems</i>. Vol. 16. pp. 739–751.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Abstract+machines+for+programming+language+implementation&rft.btitle=Future+Generation+Computer+Systems&rft.pages=739-751&rft.date=2000&rft.aulast=Diehl&rft.aufirst=Stephan&rft.au=Hartel%2C+Pieter&rft.au=Sestoft%2C+Peter&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLandin1965a" class="citation journal cs1">Landin, Peter J. (February 1965a). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F363744.363749">"Correspondence between ALGOL 60 and Church's Lambda-notation: part I"</a>. <i><a href="/wiki/Communications_of_the_ACM" title="Communications of the ACM">Communications of the ACM</a></i>. <b>8</b> (2). <a href="/wiki/Association_for_Computing_Machinery" title="Association for Computing Machinery">Association for Computing Machinery</a>: 89–101. <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.1145%2F363744.363749">10.1145/363744.363749</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:6505810">6505810</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Communications+of+the+ACM&rft.atitle=Correspondence+between+ALGOL+60+and+Church%27s+Lambda-notation%3A+part+I&rft.volume=8&rft.issue=2&rft.pages=89-101&rft.date=1965-02&rft_id=info%3Adoi%2F10.1145%2F363744.363749&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A6505810%23id-name%3DS2CID&rft.aulast=Landin&rft.aufirst=Peter+J.&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F363744.363749&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLandin1965b" class="citation journal cs1">Landin, Peter J. (March 1965b). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F363791.363804">"A correspondence between ALGOL 60 and Church's Lambda-notation: part II"</a>. <i><a href="/wiki/Communications_of_the_ACM" title="Communications of the ACM">Communications of the ACM</a></i>. <b>8</b> (3). <a href="/wiki/Association_for_Computing_Machinery" title="Association for Computing Machinery">Association for Computing Machinery</a>: 158–165. <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.1145%2F363791.363804">10.1145/363791.363804</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:15781851">15781851</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Communications+of+the+ACM&rft.atitle=A+correspondence+between+ALGOL+60+and+Church%27s+Lambda-notation%3A+part+II&rft.volume=8&rft.issue=3&rft.pages=158-165&rft.date=1965-03&rft_id=info%3Adoi%2F10.1145%2F363791.363804&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A15781851%23id-name%3DS2CID&rft.aulast=Landin&rft.aufirst=Peter+J.&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F363791.363804&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-48">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLandin1966b" class="citation journal cs1">Landin, Peter J. (March 1966b). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F365230.365257">"The next 700 programming languages"</a>. <i><a href="/wiki/Communications_of_the_ACM" title="Communications of the ACM">Communications of the ACM</a></i>. <b>9</b> (3). <a href="/wiki/Association_for_Computing_Machinery" title="Association for Computing Machinery">Association for Computing Machinery</a>: 157–166. <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.1145%2F365230.365257">10.1145/365230.365257</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:13409665">13409665</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Communications+of+the+ACM&rft.atitle=The+next+700+programming+languages&rft.volume=9&rft.issue=3&rft.pages=157-166&rft.date=1966-03&rft_id=info%3Adoi%2F10.1145%2F365230.365257&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A13409665%23id-name%3DS2CID&rft.aulast=Landin&rft.aufirst=Peter+J.&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F365230.365257&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-Backus_1977-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-Backus_1977_49-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBackus1978" class="citation journal cs1">Backus, J. (1978). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F359576.359579">"Can programming be liberated from the von Neumann style?: A functional style and its algebra of programs"</a>. <i>Communications of the ACM</i>. <b>21</b> (8): 613–641. <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.1145%2F359576.359579">10.1145/359576.359579</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Communications+of+the+ACM&rft.atitle=Can+programming+be+liberated+from+the+von+Neumann+style%3F%3A+A+functional+style+and+its+algebra+of+programs&rft.volume=21&rft.issue=8&rft.pages=613-641&rft.date=1978&rft_id=info%3Adoi%2F10.1145%2F359576.359579&rft.aulast=Backus&rft.aufirst=J.&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F359576.359579&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text">R.M. Burstall. Design considerations for a functional programming language. Invited paper, Proc. Infotech State of the Art Conf. "The Software Revolution", Copenhagen, 45–57 (1977)</span> </li> <li id="cite_note-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-51">^</a></b></span> <span class="reference-text">R.M. Burstall and J. Darlington. A transformation system for developing recursive programs. Journal of the Association for Computing Machinery 24(1):44–67 (1977)</span> </li> <li id="cite_note-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-52">^</a></b></span> <span class="reference-text">R.M. Burstall, D.B. MacQueen and D.T. Sannella. HOPE: an experimental applicative language. Proceedings 1980 LISP Conference, Stanford, 136–143 (1980).</span> </li> <li id="cite_note-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-53">^</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://web.archive.org/web/20230419060430/https://forum.openscad.org/Make-discovering-assign-easier-td10964.html">"Make discovering assign() easier!"</a>. <i>OpenSCAD</i>. Archived from <a rel="nofollow" class="external text" href="https://forum.openscad.org/Make-discovering-assign-easier-td10964.html">the original</a> on 2023-04-19.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=OpenSCAD&rft.atitle=Make+discovering+assign%28%29+easier%21&rft_id=https%3A%2F%2Fforum.openscad.org%2FMake-discovering-assign-easier-td10964.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-54">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPeter_Bright2018" class="citation web cs1">Peter Bright (March 13, 2018). <a rel="nofollow" class="external text" href="https://arstechnica.com/gadgets/2018/03/developers-love-trendy-new-languages-but-earn-more-with-functional-programming/">"Developers love trendy new languages but earn more with functional programming"</a>. <i><a href="/wiki/Ars_Technica" title="Ars Technica">Ars Technica</a></i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Ars+Technica&rft.atitle=Developers+love+trendy+new+languages+but+earn+more+with+functional+programming&rft.date=2018-03-13&rft.au=Peter+Bright&rft_id=https%3A%2F%2Farstechnica.com%2Fgadgets%2F2018%2F03%2Fdevelopers-love-trendy-new-languages-but-earn-more-with-functional-programming%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-55"><span class="mw-cite-backlink"><b><a href="#cite_ref-55">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFJohn_Leonard2017" class="citation web cs1">John Leonard (January 24, 2017). <a rel="nofollow" class="external text" href="https://www.computing.co.uk/ctg/analysis/3003123/the-slow-but-steady-rise-of-functional-programming">"The stealthy rise of functional programming"</a>. Computing.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+stealthy+rise+of+functional+programming&rft.pub=Computing&rft.date=2017-01-24&rft.au=John+Leonard&rft_id=https%3A%2F%2Fwww.computing.co.uk%2Fctg%2Fanalysis%2F3003123%2Fthe-slow-but-steady-rise-of-functional-programming&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-56"><span class="mw-cite-backlink"><b><a href="#cite_ref-56">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLeo_Cheung2017" class="citation magazine cs1">Leo Cheung (May 9, 2017). <a rel="nofollow" class="external text" href="https://www.infoworld.com/article/3190185/software/is-functional-programming-better-for-your-startup.html">"Is functional programming better for your startup?"</a>. <i><a href="/wiki/InfoWorld" title="InfoWorld">InfoWorld</a></i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=InfoWorld&rft.atitle=Is+functional+programming+better+for+your+startup%3F&rft.date=2017-05-09&rft.au=Leo+Cheung&rft_id=https%3A%2F%2Fwww.infoworld.com%2Farticle%2F3190185%2Fsoftware%2Fis-functional-programming-better-for-your-startup.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-57"><span class="mw-cite-backlink"><b><a href="#cite_ref-57">^</a></b></span> <span class="reference-text">Sean Tull - Monoidal Categories for Formal Concept Analysis.</span> </li> <li id="cite_note-58"><span class="mw-cite-backlink"><b><a href="#cite_ref-58">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPountain" class="citation web cs1">Pountain, Dick. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20060827094123/http://byte.com/art/9408/sec11/art1.htm">"Functional Programming Comes of Age"</a>. <i><a href="/wiki/Byte_(magazine)" title="Byte (magazine)">Byte</a> (August 1994)</i>. Archived from <a rel="nofollow" class="external text" href="http://byte.com/art/9408/sec11/art1.htm">the original</a> on 2006-08-27<span class="reference-accessdate">. Retrieved <span class="nowrap">August 31,</span> 2006</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Byte+%28August+1994%29&rft.atitle=Functional+Programming+Comes+of+Age&rft.aulast=Pountain&rft.aufirst=Dick&rft_id=http%3A%2F%2Fbyte.com%2Fart%2F9408%2Fsec11%2Fart1.htm&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-fortran95-59"><span class="mw-cite-backlink">^ <a href="#cite_ref-fortran95_59-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-fortran95_59-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="https://wg5-fortran.org/N2101-N2150/N2137.pdf">"ISO/IEC JTC 1/SC 22/WG5/N2137 – Fortran 2015 Committee Draft (J3/17-007r2)"</a> <span class="cs1-format">(PDF)</span>. International Organization for Standardization. July 6, 2017. pp. 336–338.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=ISO%2FIEC+JTC+1%2FSC+22%2FWG5%2FN2137+%E2%80%93+Fortran+2015+Committee+Draft+%28J3%2F17-007r2%29&rft.pages=336-338&rft.pub=International+Organization+for+Standardization&rft.date=2017-07-06&rft_id=https%3A%2F%2Fwg5-fortran.org%2FN2101-N2150%2FN2137.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-SchemeProperTailRec-60"><span class="mw-cite-backlink"><b><a href="#cite_ref-SchemeProperTailRec_60-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-8.html#node_sec_5.11">"Revised^6 Report on the Algorithmic Language Scheme"</a>. R6rs.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-03-21</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&rft.pub=R6rs.org&rft_id=http%3A%2F%2Fwww.r6rs.org%2Ffinal%2Fhtml%2Fr6rs%2Fr6rs-Z-H-8.html%23node_sec_5.11&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-61"><span class="mw-cite-backlink"><b><a href="#cite_ref-61">^</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-rationale/r6rs-rationale-Z-H-7.html#node_sec_5.3">"Revised^6 Report on the Algorithmic Language Scheme - Rationale"</a>. R6rs.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-03-21</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+-+Rationale&rft.pub=R6rs.org&rft_id=http%3A%2F%2Fwww.r6rs.org%2Ffinal%2Fhtml%2Fr6rs-rationale%2Fr6rs-rationale-Z-H-7.html%23node_sec_5.3&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-62"><span class="mw-cite-backlink"><b><a href="#cite_ref-62">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFClinger1998" class="citation book cs1">Clinger, William (1998). "Proper tail recursion and space efficiency". <i>Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation - PLDI '98</i>. pp. 174–185. <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%2F277650.277719">10.1145/277650.277719</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/0897919874" title="Special:BookSources/0897919874"><bdi>0897919874</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:16812984">16812984</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Proper+tail+recursion+and+space+efficiency&rft.btitle=Proceedings+of+the+ACM+SIGPLAN+1998+conference+on+Programming+language+design+and+implementation+-+PLDI+%2798&rft.pages=174-185&rft.date=1998&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A16812984%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1145%2F277650.277719&rft.isbn=0897919874&rft.aulast=Clinger&rft.aufirst=William&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-63"><span class="mw-cite-backlink"><b><a href="#cite_ref-63">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBaker1994" class="citation web cs1">Baker, Henry (1994). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20060303155622/http://home.pipeline.com/~hbaker1/CheneyMTA.html">"CONS Should Not CONS Its Arguments, Part II: Cheney on the M.T.A."</a> Archived from <a rel="nofollow" class="external text" href="http://home.pipeline.com/~hbaker1/CheneyMTA.html">the original</a> on 2006-03-03<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=CONS+Should+Not+CONS+Its+Arguments%2C+Part+II%3A+Cheney+on+the+M.T.A.&rft.date=1994&rft.aulast=Baker&rft.aufirst=Henry&rft_id=http%3A%2F%2Fhome.pipeline.com%2F~hbaker1%2FCheneyMTA.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-totalfp-64"><span class="mw-cite-backlink"><b><a href="#cite_ref-totalfp_64-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFTurner2004" class="citation journal cs1"><a href="/wiki/David_Turner_(computer_scientist)" title="David Turner (computer scientist)">Turner, D.A.</a> (2004-07-28). <a rel="nofollow" class="external text" href="http://www.jucs.org/jucs_10_7/total_functional_programming">"Total Functional Programming"</a>. <i>Journal of Universal Computer Science</i>. <b>10</b> (7): 751–768. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.3217%2Fjucs-010-07-0751">10.3217/jucs-010-07-0751</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+Universal+Computer+Science&rft.atitle=Total+Functional+Programming&rft.volume=10&rft.issue=7&rft.pages=751-768&rft.date=2004-07-28&rft_id=info%3Adoi%2F10.3217%2Fjucs-010-07-0751&rft.aulast=Turner&rft.aufirst=D.A.&rft_id=http%3A%2F%2Fwww.jucs.org%2Fjucs_10_7%2Ftotal_functional_programming&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-65"><span class="mw-cite-backlink"><b><a href="#cite_ref-65">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://research.microsoft.com/~simonpj/papers/slpj-book-1987/index.htm">The Implementation of Functional Programming Languages</a>. Simon Peyton Jones, published by Prentice Hall, 1987</span> </li> <li id="cite_note-launchbury1993-66"><span class="mw-cite-backlink">^ <a href="#cite_ref-launchbury1993_66-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-launchbury1993_66-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="CITEREFLaunchbury1993" class="citation conference cs1"><a href="/wiki/John_Launchbury" title="John Launchbury">Launchbury, John</a> (March 1993). <i>A Natural Semantics for Lazy Evaluation</i>. Symposium on Principles of Programming Languages. Charleston, South Carolina: <a href="/wiki/Association_for_Computing_Machinery" title="Association for Computing Machinery">ACM</a>. pp. 144–154. <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.1145%2F158511.158618">10.1145/158511.158618</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=A+Natural+Semantics+for+Lazy+Evaluation&rft.place=Charleston%2C+South+Carolina&rft.pages=144-154&rft.pub=ACM&rft.date=1993-03&rft_id=info%3Adoi%2F10.1145%2F158511.158618&rft.aulast=Launchbury&rft.aufirst=John&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-67"><span class="mw-cite-backlink"><b><a href="#cite_ref-67">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRobert_W._Harper2009" class="citation book cs1"><a href="/wiki/Robert_Harper_(computer_scientist)" title="Robert Harper (computer scientist)">Robert W. Harper</a> (2009). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160407095249/https://www.cs.cmu.edu/~rwh/plbook/book.pdf"><i>Practical Foundations for Programming Languages</i></a> <span class="cs1-format">(PDF)</span>. Archived from <a rel="nofollow" class="external text" href="https://www.cs.cmu.edu/~rwh/plbook/book.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2016-04-07.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Practical+Foundations+for+Programming+Languages&rft.date=2009&rft.au=Robert+W.+Harper&rft_id=https%3A%2F%2Fwww.cs.cmu.edu%2F~rwh%2Fplbook%2Fbook.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-68"><span class="mw-cite-backlink"><b><a href="#cite_ref-68">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHuet1973" class="citation journal cs1">Huet, Gérard P. (1973). "The Undecidability of Unification in Third Order Logic". <i>Information and Control</i>. <b>22</b> (3): 257–267. <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%2Fs0019-9958%2873%2990301-x">10.1016/s0019-9958(73)90301-x</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Information+and+Control&rft.atitle=The+Undecidability+of+Unification+in+Third+Order+Logic&rft.volume=22&rft.issue=3&rft.pages=257-267&rft.date=1973&rft_id=info%3Adoi%2F10.1016%2Fs0019-9958%2873%2990301-x&rft.aulast=Huet&rft.aufirst=G%C3%A9rard+P.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-69"><span class="mw-cite-backlink"><b><a href="#cite_ref-69">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHuet1976" class="citation thesis cs1 cs1-prop-foreign-lang-source">Huet, Gérard (Sep 1976). <i>Resolution d'Equations dans des Langages d'Ordre 1,2,...ω</i> (Ph.D.) (in French). Universite de Paris VII.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adissertation&rft.title=Resolution+d%27Equations+dans+des+Langages+d%27Ordre+1%2C2%2C...%CF%89&rft.inst=Universite+de+Paris+VII&rft.date=1976-09&rft.aulast=Huet&rft.aufirst=G%C3%A9rard&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-70"><span class="mw-cite-backlink"><b><a href="#cite_ref-70">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHuet2002" class="citation book cs1">Huet, Gérard (2002). <a rel="nofollow" class="external text" href="http://pauillac.inria.fr/~huet/PUBLIC/Hampton.pdf">"Higher Order Unification 30 years later"</a> <span class="cs1-format">(PDF)</span>. In Carreño, V.; Muñoz, C.; Tahar, S. (eds.). <i>Proceedings, 15th International Conference TPHOL</i>. LNCS. Vol. 2410. Springer. pp. 3–12.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Higher+Order+Unification+30+years+later&rft.btitle=Proceedings%2C+15th+International+Conference+TPHOL&rft.series=LNCS&rft.pages=3-12&rft.pub=Springer&rft.date=2002&rft.aulast=Huet&rft.aufirst=G%C3%A9rard&rft_id=http%3A%2F%2Fpauillac.inria.fr%2F~huet%2FPUBLIC%2FHampton.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-71"><span class="mw-cite-backlink"><b><a href="#cite_ref-71">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWells1993" class="citation journal cs1">Wells, J. B. (1993). "Typability and type checking in the second-order lambda-calculus are equivalent and undecidable". <i>Tech. Rep. 93-011</i>: 176–185. <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.31.3590">10.1.1.31.3590</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Tech.+Rep.+93-011&rft.atitle=Typability+and+type+checking+in+the+second-order+lambda-calculus+are+equivalent+and+undecidable&rft.pages=176-185&rft.date=1993&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.31.3590%23id-name%3DCiteSeerX&rft.aulast=Wells&rft.aufirst=J.+B.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-72"><span class="mw-cite-backlink"><b><a href="#cite_ref-72">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLeroy2018" class="citation web cs1">Leroy, Xavier (17 September 2018). <a rel="nofollow" class="external text" href="http://compcert.inria.fr/doc/index.html">"The Compcert verified compiler"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+Compcert+verified+compiler&rft.date=2018-09-17&rft.aulast=Leroy&rft.aufirst=Xavier&rft_id=http%3A%2F%2Fcompcert.inria.fr%2Fdoc%2Findex.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-73"><span class="mw-cite-backlink"><b><a href="#cite_ref-73">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPeyton_JonesVytiniotisWeirichGeoffrey_Washburn2006" class="citation journal cs1">Peyton Jones, Simon; Vytiniotis, Dimitrios; <a href="/wiki/Stephanie_Weirich" title="Stephanie Weirich">Weirich, Stephanie</a>; Geoffrey Washburn (April 2006). <a rel="nofollow" class="external text" href="http://research.microsoft.com/en-us/um/people/simonpj/papers/gadt/">"Simple unification-based type inference for GADTs"</a>. <i>Icfp 2006</i>: 50–61.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Icfp+2006&rft.atitle=Simple+unification-based+type+inference+for+GADTs&rft.pages=50-61&rft.date=2006-04&rft.aulast=Peyton+Jones&rft.aufirst=Simon&rft.au=Vytiniotis%2C+Dimitrios&rft.au=Weirich%2C+Stephanie&rft.au=Geoffrey+Washburn&rft_id=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Fsimonpj%2Fpapers%2Fgadt%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-74"><span class="mw-cite-backlink"><b><a href="#cite_ref-74">^</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://caml.inria.fr/pub/docs/manual-ocaml/gadts.html">"OCaml Manual"</a>. <i>caml.inria.fr</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-03-08</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=caml.inria.fr&rft.atitle=OCaml+Manual&rft_id=https%3A%2F%2Fcaml.inria.fr%2Fpub%2Fdocs%2Fmanual-ocaml%2Fgadts.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-75"><span class="mw-cite-backlink"><b><a href="#cite_ref-75">^</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://docs.scala-lang.org/scala3/book/types-adts-gadts.html">"Algebraic Data Types"</a>. <i>Scala Documentation</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-03-08</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Scala+Documentation&rft.atitle=Algebraic+Data+Types&rft_id=https%3A%2F%2Fdocs.scala-lang.org%2Fscala3%2Fbook%2Ftypes-adts-gadts.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-76"><span class="mw-cite-backlink"><b><a href="#cite_ref-76">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKennedyRusso2005" class="citation conference cs1">Kennedy, Andrew; Russo, Claudio V. (October 2005). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20061229164852/http://research.microsoft.com/~akenn/generics/gadtoop.pdf"><i>Generalized Algebraic Data Types and Object-Oriented Programming</i></a> <span class="cs1-format">(PDF)</span>. OOPSLA. San Diego, California: <a href="/wiki/Association_for_Computing_Machinery" title="Association for Computing Machinery">ACM</a>. <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%2F1094811.1094814">10.1145/1094811.1094814</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/9781595930316" title="Special:BookSources/9781595930316"><bdi>9781595930316</bdi></a>. Archived from <a rel="nofollow" class="external text" href="https://www.microsoft.com/en-us/research/publication/generalized-algebraic-data-types-and-object-oriented-programming/">the original</a> on 2006-12-29.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=Generalized+Algebraic+Data+Types+and+Object-Oriented+Programming&rft.place=San+Diego%2C+California&rft.pub=ACM&rft.date=2005-10&rft_id=info%3Adoi%2F10.1145%2F1094811.1094814&rft.isbn=9781595930316&rft.aulast=Kennedy&rft.aufirst=Andrew&rft.au=Russo%2C+Claudio+V.&rft_id=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fresearch%2Fpublication%2Fgeneralized-algebraic-data-types-and-object-oriented-programming%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-77"><span class="mw-cite-backlink"><b><a href="#cite_ref-77">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHughes" class="citation web cs1">Hughes, John. <a rel="nofollow" class="external text" href="http://www.cse.chalmers.se/~rjmh/Papers/whyfp.pdf">"Why Functional Programming Matters"</a> <span class="cs1-format">(PDF)</span>. <a href="/wiki/Chalmers_University_of_Technology" title="Chalmers University of Technology">Chalmers University 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=Why+Functional+Programming+Matters&rft.pub=Chalmers+University+of+Technology&rft.aulast=Hughes&rft.aufirst=John&rft_id=http%3A%2F%2Fwww.cse.chalmers.se%2F~rjmh%2FPapers%2Fwhyfp.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-78"><span class="mw-cite-backlink"><b><a href="#cite_ref-78">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.cambridge.org/us/academic/subjects/computer-science/algorithmics-complexity-computer-algebra-and-computational-g/purely-functional-data-structures"><i>Purely functional data structures</i></a> by <a href="/wiki/Chris_Okasaki" title="Chris Okasaki">Chris Okasaki</a>, <a href="/wiki/Cambridge_University_Press" title="Cambridge University Press">Cambridge University Press</a>, 1998, <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/0-521-66350-4" title="Special:BookSources/0-521-66350-4">0-521-66350-4</a></span> </li> <li id="cite_note-79"><span class="mw-cite-backlink"><b><a href="#cite_ref-79">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFL’orange" class="citation web cs1">L’orange, Jean Niklas. <a rel="nofollow" class="external text" href="http://www.hypirion.com/musings/understanding-persistent-vector-pt-1">"polymatheia - Understanding Clojure's Persistent Vector, pt. 1"</a>. <i>Polymatheia</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-11-13</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Polymatheia&rft.atitle=polymatheia+-+Understanding+Clojure%27s+Persistent+Vector%2C+pt.+1&rft.aulast=L%E2%80%99orange&rft.aufirst=Jean+Niklas&rft_id=http%3A%2F%2Fwww.hypirion.com%2Fmusings%2Funderstanding-persistent-vector-pt-1&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-80"><span class="mw-cite-backlink"><b><a href="#cite_ref-80">^</a></b></span> <span class="reference-text">Michael Barr, Charles Well - Category theory for computer science.</span> </li> <li id="cite_note-81"><span class="mw-cite-backlink"><b><a href="#cite_ref-81">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFNewbern" class="citation web cs1">Newbern, J. <a rel="nofollow" class="external text" href="http://monads.haskell.cz/html/index.html/html/">"All About Monads: A comprehensive guide to the theory and practice of monadic programming in Haskell"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2008-02-14</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=All+About+Monads%3A+A+comprehensive+guide+to+the+theory+and+practice+of+monadic+programming+in+Haskell&rft.aulast=Newbern&rft.aufirst=J.&rft_id=http%3A%2F%2Fmonads.haskell.cz%2Fhtml%2Findex.html%2Fhtml%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-82"><span class="mw-cite-backlink"><b><a href="#cite_ref-82">^</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://fsharpforfunandprofit.com/posts/13-ways-of-looking-at-a-turtle/#2-basic-fp---a-module-of-functions-with-immutable-state">"Thirteen ways of looking at a turtle"</a>. <i>fF# for fun and profit</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-11-13</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=fF%23+for+fun+and+profit&rft.atitle=Thirteen+ways+of+looking+at+a+turtle&rft_id=https%3A%2F%2Ffsharpforfunandprofit.com%2Fposts%2F13-ways-of-looking-at-a-turtle%2F%232-basic-fp---a-module-of-functions-with-immutable-state&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-83"><span class="mw-cite-backlink"><b><a href="#cite_ref-83">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPaulson1996" class="citation book cs1"><a href="/wiki/Lawrence_Paulson" title="Lawrence Paulson">Paulson, Larry C.</a> (28 June 1996). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=XppZdaDs7e0C"><i>ML for the Working Programmer</i></a>. Cambridge University Press. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-521-56543-1" title="Special:BookSources/978-0-521-56543-1"><bdi>978-0-521-56543-1</bdi></a><span class="reference-accessdate">. Retrieved <span class="nowrap">10 February</span> 2013</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=ML+for+the+Working+Programmer&rft.pub=Cambridge+University+Press&rft.date=1996-06-28&rft.isbn=978-0-521-56543-1&rft.aulast=Paulson&rft.aufirst=Larry+C.&rft_id=https%3A%2F%2Fbooks.google.com%2Fbooks%3Fid%3DXppZdaDs7e0C&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-Spiewak-84"><span class="mw-cite-backlink"><b><a href="#cite_ref-Spiewak_84-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFSpiewak2008" class="citation web cs1">Spiewak, Daniel (26 August 2008). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150923205254/http://www.codecommit.com/blog/scala/implementing-persistent-vectors-in-scala">"Implementing Persistent Vectors in Scala"</a>. <i>Code Commit</i>. Archived from <a rel="nofollow" class="external text" href="http://www.codecommit.com/blog/scala/implementing-persistent-vectors-in-scala">the original</a> on 23 September 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">17 April</span> 2012</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Code+Commit&rft.atitle=Implementing+Persistent+Vectors+in+Scala&rft.date=2008-08-26&rft.aulast=Spiewak&rft.aufirst=Daniel&rft_id=http%3A%2F%2Fwww.codecommit.com%2Fblog%2Fscala%2Fimplementing-persistent-vectors-in-scala&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-85"><span class="mw-cite-backlink"><b><a href="#cite_ref-85">^</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://web.archive.org/web/20130520162513/http://benchmarksgame.alioth.debian.org/u32/which-programs-are-fastest.php?gcc=on&ghc=on&clean=on&ocaml=on&sbcl=on&fsharp=on&racket=on&clojure=on&hipe=on&calc=chart">"Which programs are fastest? | Computer Language Benchmarks Game"</a>. benchmarksgame.alioth.debian.org. Archived from <a rel="nofollow" class="external text" href="http://benchmarksgame.alioth.debian.org/u32/which-programs-are-fastest.php?gcc=on&ghc=on&clean=on&ocaml=on&sbcl=on&fsharp=on&racket=on&clojure=on&hipe=on&calc=chart">the original</a> on 2013-05-20<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-06-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=Which+programs+are+fastest%3F+%26%23124%3B+Computer+Language+Benchmarks+Game&rft.pub=benchmarksgame.alioth.debian.org&rft_id=http%3A%2F%2Fbenchmarksgame.alioth.debian.org%2Fu32%2Fwhich-programs-are-fastest.php%3Fgcc%3Don%26ghc%3Don%26clean%3Don%26ocaml%3Don%26sbcl%3Don%26fsharp%3Don%26racket%3Don%26clojure%3Don%26hipe%3Don%26calc%3Dchart&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-86"><span class="mw-cite-backlink"><b><a href="#cite_ref-86">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFIgor_PechtchanskiVivek_Sarkar2005" class="citation journal cs1">Igor Pechtchanski; Vivek Sarkar (2005). "Immutability specification and its applications". <i>Concurrency and Computation: Practice and Experience</i>. <b>17</b> (5–6): 639–662. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1002%2Fcpe.853">10.1002/cpe.853</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:34527406">34527406</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Concurrency+and+Computation%3A+Practice+and+Experience&rft.atitle=Immutability+specification+and+its+applications&rft.volume=17&rft.issue=5%E2%80%936&rft.pages=639-662&rft.date=2005&rft_id=info%3Adoi%2F10.1002%2Fcpe.853&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A34527406%23id-name%3DS2CID&rft.au=Igor+Pechtchanski&rft.au=Vivek+Sarkar&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-87"><span class="mw-cite-backlink"><b><a href="#cite_ref-87">^</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.infoq.com/articles/in-depth-look-clojure-collections/">"An In-Depth Look at Clojure Collections"</a>. <i>InfoQ</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=InfoQ&rft.atitle=An+In-Depth+Look+at+Clojure+Collections&rft_id=https%3A%2F%2Fwww.infoq.com%2Farticles%2Fin-depth-look-clojure-collections%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-88"><span class="mw-cite-backlink"><b><a href="#cite_ref-88">^</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://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html">"References and Borrowing - The Rust Programming Language"</a>. <i>doc.rust-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=doc.rust-lang.org&rft.atitle=References+and+Borrowing+-+The+Rust+Programming+Language&rft_id=https%3A%2F%2Fdoc.rust-lang.org%2Fbook%2Fch04-02-references-and-borrowing.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-89"><span class="mw-cite-backlink"><b><a href="#cite_ref-89">^</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://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html">"Validating References with Lifetimes - The Rust Programming Language"</a>. <i>doc.rust-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=doc.rust-lang.org&rft.atitle=Validating+References+with+Lifetimes+-+The+Rust+Programming+Language&rft_id=https%3A%2F%2Fdoc.rust-lang.org%2Fbook%2Fch10-03-lifetime-syntax.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-90"><span class="mw-cite-backlink"><b><a href="#cite_ref-90">^</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://docs.oracle.com/javase/tutorial/essential/concurrency/collections.html">"Concurrent Collections (The Java™ Tutorials > Essential Java Classes > Concurrency)"</a>. <i>docs.oracle.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=docs.oracle.com&rft.atitle=Concurrent+Collections+%28The+Java%E2%84%A2+Tutorials+%3E+Essential+Java+Classes+%3E+Concurrency%29&rft_id=https%3A%2F%2Fdocs.oracle.com%2Fjavase%2Ftutorial%2Fessential%2Fconcurrency%2Fcollections.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-91"><span class="mw-cite-backlink"><b><a href="#cite_ref-91">^</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://scaleyourapp.com/actor-model/">"Understanding The Actor Model To Build Non-blocking, High-throughput Distributed Systems - Scaleyourapp"</a>. <i>scaleyourapp.com</i>. 2023-01-28<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=scaleyourapp.com&rft.atitle=Understanding+The+Actor+Model+To+Build+Non-blocking%2C+High-throughput+Distributed+Systems+-+Scaleyourapp&rft.date=2023-01-28&rft_id=https%3A%2F%2Fscaleyourapp.com%2Factor-model%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-92"><span class="mw-cite-backlink"><b><a href="#cite_ref-92">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFCesariniThompson2009" class="citation book cs1">Cesarini, Francesco; Thompson, Simon (2009). <i>Erlang programming: a concurrent approach to software development</i> (1st ed.). O'Reilly Media, Inc. (published 2009-06-11). p. 6. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-596-55585-6" title="Special:BookSources/978-0-596-55585-6"><bdi>978-0-596-55585-6</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Erlang+programming%3A+a+concurrent+approach+to+software+development&rft.pages=6&rft.edition=1st&rft.pub=O%27Reilly+Media%2C+Inc.&rft.date=2009&rft.isbn=978-0-596-55585-6&rft.aulast=Cesarini&rft.aufirst=Francesco&rft.au=Thompson%2C+Simon&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-93"><span class="mw-cite-backlink"><b><a href="#cite_ref-93">^</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://book.realworldhaskell.org/read/profiling-and-optimization.html#x_eK1">"Chapter 25. Profiling and optimization"</a>. Book.realworldhaskell.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-06-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=Chapter+25.+Profiling+and+optimization&rft.pub=Book.realworldhaskell.org&rft_id=http%3A%2F%2Fbook.realworldhaskell.org%2Fread%2Fprofiling-and-optimization.html%23x_eK1&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-94"><span class="mw-cite-backlink"><b><a href="#cite_ref-94">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBerthe2024" class="citation cs2">Berthe, Samuel (2024-04-29), <a rel="nofollow" class="external text" href="https://github.com/samber/lo"><i>samber/lo</i></a><span class="reference-accessdate">, retrieved <span class="nowrap">2024-04-29</span></span></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=samber%2Flo&rft.date=2024-04-29&rft.aulast=Berthe&rft.aufirst=Samuel&rft_id=https%3A%2F%2Fgithub.com%2Fsamber%2Flo&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-95"><span class="mw-cite-backlink"><b><a href="#cite_ref-95">^</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://go.dev/wiki/CompilerOptimizations">"Go Wiki: Compiler And Runtime Optimizations - The Go Programming Language"</a>. <i>go.dev</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=go.dev&rft.atitle=Go+Wiki%3A+Compiler+And+Runtime+Optimizations+-+The+Go+Programming+Language&rft_id=https%3A%2F%2Fgo.dev%2Fwiki%2FCompilerOptimizations&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-96"><span class="mw-cite-backlink"><b><a href="#cite_ref-96">^</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://doc.rust-lang.org/book/ch13-04-performance.html">"Comparing Performance: Loops vs. Iterators - The Rust Programming Language"</a>. <i>doc.rust-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=doc.rust-lang.org&rft.atitle=Comparing+Performance%3A+Loops+vs.+Iterators+-+The+Rust+Programming+Language&rft_id=https%3A%2F%2Fdoc.rust-lang.org%2Fbook%2Fch13-04-performance.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-97"><span class="mw-cite-backlink"><b><a href="#cite_ref-97">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHartelHenk_MullerHugh_Glaser2004" class="citation journal cs1">Hartel, Pieter; Henk Muller; Hugh Glaser (March 2004). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20110719201553/http://www.ub.utwente.nl/webdocs/ctit/1/00000084.pdf">"The Functional C experience"</a> <span class="cs1-format">(PDF)</span>. <i>Journal of Functional Programming</i>. <b>14</b> (2): 129–135. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1017%2FS0956796803004817">10.1017/S0956796803004817</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:32346900">32346900</a>. Archived from <a rel="nofollow" class="external text" href="http://www.ub.utwente.nl/webdocs/ctit/1/00000084.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2011-07-19<span class="reference-accessdate">. Retrieved <span class="nowrap">2006-05-28</span></span>.</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=The+Functional+C+experience&rft.volume=14&rft.issue=2&rft.pages=129-135&rft.date=2004-03&rft_id=info%3Adoi%2F10.1017%2FS0956796803004817&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A32346900%23id-name%3DS2CID&rft.aulast=Hartel&rft.aufirst=Pieter&rft.au=Henk+Muller&rft.au=Hugh+Glaser&rft_id=http%3A%2F%2Fwww.ub.utwente.nl%2Fwebdocs%2Fctit%2F1%2F00000084.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span>; <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDavid_Mertz" class="citation web cs1">David Mertz. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20071016124848/http://www-128.ibm.com/developerworks/linux/library/l-prog3.html">"Functional programming in Python, Part 3"</a>. <i>IBM developerWorks</i>. Archived from <a rel="nofollow" class="external text" href="http://www-128.ibm.com/developerworks/linux/library/l-prog3.html">the original</a> on 2007-10-16<span class="reference-accessdate">. Retrieved <span class="nowrap">2006-09-17</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=IBM+developerWorks&rft.atitle=Functional+programming+in+Python%2C+Part+3&rft.au=David+Mertz&rft_id=http%3A%2F%2Fwww-128.ibm.com%2Fdeveloperworks%2Flinux%2Flibrary%2Fl-prog3.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span>(<a rel="nofollow" class="external text" href="https://web.archive.org/web/20071016124848/http://www-128.ibm.com/developerworks/linux/library/l-prog.html">Part 1</a>, <a rel="nofollow" class="external text" href="https://web.archive.org/web/20071016124848/http://www-128.ibm.com/developerworks/linux/library/l-prog2.html">Part 2</a>)</span> </li> <li id="cite_note-98"><span class="mw-cite-backlink"><b><a href="#cite_ref-98">^</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.digitalmars.com/d/2.0/function.html#pure-functions">"Functions — D Programming Language 2.0"</a>. Digital Mars. 30 December 2012.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Functions+%E2%80%94+D+Programming+Language+2.0&rft.pub=Digital+Mars&rft.date=2012-12-30&rft_id=http%3A%2F%2Fwww.digitalmars.com%2Fd%2F2.0%2Ffunction.html%23pure-functions&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-99"><span class="mw-cite-backlink"><b><a href="#cite_ref-99">^</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.luafaq.org/#T1.2">"Lua Unofficial FAQ (uFAQ)"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Lua+Unofficial+FAQ+%28uFAQ%29&rft_id=http%3A%2F%2Fwww.luafaq.org%2F%23T1.2&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-100"><span class="mw-cite-backlink"><b><a href="#cite_ref-100">^</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://golang.org/doc/codewalk/functions/">"First-Class Functions in Go - The Go Programming Language"</a>. <i>golang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-01-04</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=golang.org&rft.atitle=First-Class+Functions+in+Go+-+The+Go+Programming+Language&rft_id=https%3A%2F%2Fgolang.org%2Fdoc%2Fcodewalk%2Ffunctions%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-101"><span class="mw-cite-backlink"><b><a href="#cite_ref-101">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFEich2008" class="citation web cs1">Eich, Brendan (3 April 2008). <a rel="nofollow" class="external text" href="https://brendaneich.com/2008/04/popularity/">"Popularity"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Popularity&rft.date=2008-04-03&rft.aulast=Eich&rft.aufirst=Brendan&rft_id=https%3A%2F%2Fbrendaneich.com%2F2008%2F04%2Fpopularity%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-102"><span class="mw-cite-backlink"><b><a href="#cite_ref-102">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFvan_Rossum2009" class="citation web cs1"><a href="/wiki/Guido_van_Rossum" title="Guido van Rossum">van Rossum, Guido</a> (2009-04-21). <a rel="nofollow" class="external text" href="http://python-history.blogspot.de/2009/04/origins-of-pythons-functional-features.html">"Origins of Python's "Functional" Features"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2012-09-27</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Origins+of+Python%27s+%22Functional%22+Features&rft.date=2009-04-21&rft.aulast=van+Rossum&rft.aufirst=Guido&rft_id=http%3A%2F%2Fpython-history.blogspot.de%2F2009%2F04%2Forigins-of-pythons-functional-features.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-103"><span class="mw-cite-backlink"><b><a href="#cite_ref-103">^</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://docs.python.org/dev/library/functools.html#functools.reduce">"functools — Higher order functions and operations on callable objects"</a>. Python Software Foundation. 2011-07-31<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-07-31</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=functools+%E2%80%94+Higher+order+functions+and+operations+on+callable+objects&rft.pub=Python+Software+Foundation&rft.date=2011-07-31&rft_id=https%3A%2F%2Fdocs.python.org%2Fdev%2Flibrary%2Ffunctools.html%23functools.reduce&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-104"><span class="mw-cite-backlink"><b><a href="#cite_ref-104">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFSkarsaune2008" class="citation book cs1">Skarsaune, Martin (2008). <i>The SICS Java Port Project Automatic Translation of a Large Object Oriented System from Smalltalk to Java</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=The+SICS+Java+Port+Project+Automatic+Translation+of+a+Large+Object+Oriented+System+from+Smalltalk+to+Java&rft.date=2008&rft.aulast=Skarsaune&rft.aufirst=Martin&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-105"><span class="mw-cite-backlink"><b><a href="#cite_ref-105">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGosling" class="citation web cs1">Gosling, James. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20130414180002/https://blogs.oracle.com/jag/entry/closures">"Closures"</a>. <i>James Gosling: on the Java Road</i>. Oracle. Archived from <a rel="nofollow" class="external text" href="http://blogs.oracle.com/jag/entry/closures">the original</a> on 2013-04-14<span class="reference-accessdate">. Retrieved <span class="nowrap">11 May</span> 2013</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=James+Gosling%3A+on+the+Java+Road&rft.atitle=Closures&rft.aulast=Gosling&rft.aufirst=James&rft_id=http%3A%2F%2Fblogs.oracle.com%2Fjag%2Fentry%2Fclosures&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-106"><span class="mw-cite-backlink"><b><a href="#cite_ref-106">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWilliams2013" class="citation web cs1">Williams, Michael (8 April 2013). <a rel="nofollow" class="external text" href="https://blogs.oracle.com/javatraining/entry/java_se_8_lambda_quick">"Java SE 8 Lambda Quick Start"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Java+SE+8+Lambda+Quick+Start&rft.date=2013-04-08&rft.aulast=Williams&rft.aufirst=Michael&rft_id=https%3A%2F%2Fblogs.oracle.com%2Fjavatraining%2Fentry%2Fjava_se_8_lambda_quick&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-107"><span class="mw-cite-backlink"><b><a href="#cite_ref-107">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBloch2008" class="citation book cs1">Bloch, Joshua (2008). "Item 15: Minimize Mutability". <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/effectivejava00bloc_0"><i>Effective Java</i></a></span> (Second ed.). Addison-Wesley. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0321356680" title="Special:BookSources/978-0321356680"><bdi>978-0321356680</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Item+15%3A+Minimize+Mutability&rft.btitle=Effective+Java&rft.edition=Second&rft.pub=Addison-Wesley&rft.date=2008&rft.isbn=978-0321356680&rft.aulast=Bloch&rft.aufirst=Joshua&rft_id=https%3A%2F%2Farchive.org%2Fdetails%2Feffectivejava00bloc_0&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-108"><span class="mw-cite-backlink"><b><a href="#cite_ref-108">^</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://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze">"Object.freeze() - JavaScript | MDN"</a>. <i>developer.mozilla.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-01-04</span></span>. <q>The Object.freeze() method freezes an object. A frozen object can no longer be changed; freezing an object prevents new properties from being added to it, existing properties from being removed, prevents changing the enumerability, configurability, or writability of existing properties, and prevents the values of existing properties from being changed. In addition, freezing an object also prevents its prototype from being changed. freeze() returns the same object that was passed in.</q></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=developer.mozilla.org&rft.atitle=Object.freeze%28%29+-+JavaScript+%7C+MDN&rft_id=https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FJavaScript%2FReference%2FGlobal_Objects%2FObject%2Ffreeze&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-109"><span class="mw-cite-backlink"><b><a href="#cite_ref-109">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDaniel_FriedmanWilliam_ByrdOleg_KiselyovJason_Hemann2018" class="citation book cs1">Daniel Friedman; William Byrd; Oleg Kiselyov; Jason Hemann (2018). <i>The Reasoned Schemer, Second Edition</i>. The MIT Press.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=The+Reasoned+Schemer%2C+Second+Edition&rft.pub=The+MIT+Press&rft.date=2018&rft.au=Daniel+Friedman&rft.au=William+Byrd&rft.au=Oleg+Kiselyov&rft.au=Jason+Hemann&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-110"><span class="mw-cite-backlink"><b><a href="#cite_ref-110">^</a></b></span> <span class="reference-text">A. Casas, D. Cabeza, M. V. Hermenegildo. A Syntactic Approach to Combining Functional Notation, Lazy Evaluation and Higher-Order in LP Systems. The 8th International Symposium on Functional and Logic Programming (FLOPS'06), pages 142-162, April 2006.</span> </li> <li id="cite_note-111"><span class="mw-cite-backlink"><b><a href="#cite_ref-111">^</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://stallman.org/stallman-computing.html">"How I do my Computing"</a>. <i>stallman.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=stallman.org&rft.atitle=How+I+do+my+Computing&rft_id=https%3A%2F%2Fstallman.org%2Fstallman-computing.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-112"><span class="mw-cite-backlink"><b><a href="#cite_ref-112">^</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://helix-editor.com/news/release-24-03-highlights/">"Helix"</a>. <i>helix-editor.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=helix-editor.com&rft.atitle=Helix&rft_id=https%3A%2F%2Fhelix-editor.com%2Fnews%2Frelease-24-03-highlights%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-Wakeling2007-113"><span class="mw-cite-backlink"><b><a href="#cite_ref-Wakeling2007_113-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWakeling2007" class="citation journal cs1">Wakeling, David (2007). <a rel="nofollow" class="external text" href="http://www.activemode.org/webroot/Workers/ActiveTraining/Programming/Pro_SpreadsheetFunctionalProgramming.pdf">"Spreadsheet functional programming"</a> <span class="cs1-format">(PDF)</span>. <i>Journal of Functional Programming</i>. <b>17</b> (1): 131–143. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1017%2FS0956796806006186">10.1017/S0956796806006186</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0956-7968">0956-7968</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:29429059">29429059</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=Spreadsheet+functional+programming&rft.volume=17&rft.issue=1&rft.pages=131-143&rft.date=2007&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A29429059%23id-name%3DS2CID&rft.issn=0956-7968&rft_id=info%3Adoi%2F10.1017%2FS0956796806006186&rft.aulast=Wakeling&rft.aufirst=David&rft_id=http%3A%2F%2Fwww.activemode.org%2Fwebroot%2FWorkers%2FActiveTraining%2FProgramming%2FPro_SpreadsheetFunctionalProgramming.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-excel-114"><span class="mw-cite-backlink"><b><a href="#cite_ref-excel_114-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPeyton_JonesBurnettBlackwell2003" class="citation web cs1"><a href="/wiki/Simon_Peyton_Jones" title="Simon Peyton Jones">Peyton Jones, Simon</a>; <a href="/wiki/Margaret_Burnett" title="Margaret Burnett">Burnett, Margaret</a>; <a href="/wiki/Alan_Blackwell" class="mw-redirect" title="Alan Blackwell">Blackwell, Alan</a> (March 2003). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20051016011341/http://research.microsoft.com/~simonpj/Papers/excel/index.htm">"Improving the world's most popular functional language: user-defined functions in Excel"</a>. Archived from <a rel="nofollow" class="external text" href="http://research.microsoft.com/~simonpj/Papers/excel/index.htm">the original</a> on 2005-10-16.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Improving+the+world%27s+most+popular+functional+language%3A+user-defined+functions+in+Excel&rft.date=2003-03&rft.aulast=Peyton+Jones&rft.aufirst=Simon&rft.au=Burnett%2C+Margaret&rft.au=Blackwell%2C+Alan&rft_id=http%3A%2F%2Fresearch.microsoft.com%2F~simonpj%2FPapers%2Fexcel%2Findex.htm&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-115"><span class="mw-cite-backlink"><b><a href="#cite_ref-115">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRodger2017" class="citation book cs1">Rodger, Richard (11 December 2017). <i>The Tao of Microservices</i>. Manning. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/9781638351733" title="Special:BookSources/9781638351733"><bdi>9781638351733</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=The+Tao+of+Microservices&rft.pub=Manning&rft.date=2017-12-11&rft.isbn=9781638351733&rft.aulast=Rodger&rft.aufirst=Richard&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-116"><span class="mw-cite-backlink"><b><a href="#cite_ref-116">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPiro2009" class="citation conference cs1">Piro, Christopher (2009). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20091017070140/http://cufp.galois.com/2009/abstracts.html#ChristopherPiroEugeneLetuchy"><i>Functional Programming at Facebook</i></a>. CUFP 2009. Archived from <a rel="nofollow" class="external text" href="http://cufp.galois.com/2009/abstracts.html#ChristopherPiroEugeneLetuchy">the original</a> on 2009-10-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=Functional+Programming+at+Facebook&rft.date=2009&rft.aulast=Piro&rft.aufirst=Christopher&rft_id=http%3A%2F%2Fcufp.galois.com%2F2009%2Fabstracts.html%23ChristopherPiroEugeneLetuchy&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-Sim-Diasca-117"><span class="mw-cite-backlink"><b><a href="#cite_ref-Sim-Diasca_117-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://research.edf.com/research-and-the-scientific-community/software/sim-diasca-80704.html">"Sim-Diasca: a large-scale discrete event concurrent simulation engine in Erlang"</a>. November 2011.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Sim-Diasca%3A+a+large-scale+discrete+event+concurrent+simulation+engine+in+Erlang&rft.date=2011-11&rft_id=http%3A%2F%2Fresearch.edf.com%2Fresearch-and-the-scientific-community%2Fsoftware%2Fsim-diasca-80704.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-whatsapp.blog.2012-118"><span class="mw-cite-backlink"><b><a href="#cite_ref-whatsapp.blog.2012_118-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/">1 million is so 2011</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20140219234031/http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/">Archived</a> 2014-02-19 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a> // WhatsApp blog, 2012-01-06: "the last important piece of our infrastracture is Erlang"</span> </li> <li id="cite_note-119"><span class="mw-cite-backlink"><b><a href="#cite_ref-119">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMomtahan2009" class="citation conference cs1">Momtahan, Lee (2009). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20091017070140/http://cufp.galois.com/2009/abstracts.html#LeeMomtahan"><i>Scala at EDF Trading: Implementing a Domain-Specific Language for Derivative Pricing with Scala</i></a>. CUFP 2009. Archived from <a rel="nofollow" class="external text" href="http://cufp.galois.com/2009/abstracts.html#LeeMomtahan">the original</a> on 2009-10-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=Scala+at+EDF+Trading%3A+Implementing+a+Domain-Specific+Language+for+Derivative+Pricing+with+Scala&rft.date=2009&rft.aulast=Momtahan&rft.aufirst=Lee&rft_id=http%3A%2F%2Fcufp.galois.com%2F2009%2Fabstracts.html%23LeeMomtahan&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-120"><span class="mw-cite-backlink"><b><a href="#cite_ref-120">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGraham2003" class="citation web cs1">Graham, Paul (2003). <a rel="nofollow" class="external text" href="http://www.paulgraham.com/avg.html">"Beating the Averages"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Beating+the+Averages&rft.date=2003&rft.aulast=Graham&rft.aufirst=Paul&rft_id=http%3A%2F%2Fwww.paulgraham.com%2Favg.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-121"><span class="mw-cite-backlink"><b><a href="#cite_ref-121">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFSims2006" class="citation conference cs1">Sims, Steve (2006). <a rel="nofollow" class="external text" href="http://cufp.galois.com/2006/slides/SteveSims.pdf"><i>Building a Startup with Standard ML</i></a> <span class="cs1-format">(PDF)</span>. CUFP 2006<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=Building+a+Startup+with+Standard+ML&rft.date=2006&rft.aulast=Sims&rft.aufirst=Steve&rft_id=http%3A%2F%2Fcufp.galois.com%2F2006%2Fslides%2FSteveSims.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-122"><span class="mw-cite-backlink"><b><a href="#cite_ref-122">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLaurikari2007" class="citation conference cs1">Laurikari, Ville (2007). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20101221110947/http://cufp.galois.com/2007/abstracts.html#VilleLaurikari"><i>Functional Programming in Communications Security</i></a>. CUFP 2007. Archived from <a rel="nofollow" class="external text" href="http://cufp.galois.com/2007/abstracts.html#VilleLaurikari">the original</a> on 2010-12-21<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=Functional+Programming+in+Communications+Security.&rft.date=2007&rft.aulast=Laurikari&rft.aufirst=Ville&rft_id=http%3A%2F%2Fcufp.galois.com%2F2007%2Fabstracts.html%23VilleLaurikari&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-123"><span class="mw-cite-backlink"><b><a href="#cite_ref-123">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLorimer2009" class="citation web cs1">Lorimer, R. J. (19 January 2009). <a rel="nofollow" class="external text" href="http://www.infoq.com/news/2009/01/clojure_production">"Live Production Clojure Application Announced"</a>. <i>InfoQ</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=InfoQ&rft.atitle=Live+Production+Clojure+Application+Announced&rft.date=2009-01-19&rft.aulast=Lorimer&rft.aufirst=R.+J.&rft_id=http%3A%2F%2Fwww.infoq.com%2Fnews%2F2009%2F01%2Fclojure_production&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-124"><span class="mw-cite-backlink"><b><a href="#cite_ref-124">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBugnion2016" class="citation book cs1">Bugnion, Pascal (2016). <i>Scala for Data Science</i> (1st ed.). <a href="/wiki/Packt" title="Packt">Packt</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/9781785281372" title="Special:BookSources/9781785281372"><bdi>9781785281372</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Scala+for+Data+Science&rft.edition=1st&rft.pub=Packt&rft.date=2016&rft.isbn=9781785281372&rft.aulast=Bugnion&rft.aufirst=Pascal&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-125"><span class="mw-cite-backlink"><b><a href="#cite_ref-125">^</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://stackshare.io/clojurescript">"Why developers like ClojureScript"</a>. <i>StackShare</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=StackShare&rft.atitle=Why+developers+like+ClojureScript&rft_id=https%3A%2F%2Fstackshare.io%2Fclojurescript&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-126"><span class="mw-cite-backlink"><b><a href="#cite_ref-126">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHerrick2024" class="citation cs2">Herrick, Justin (2024-04-29), <a rel="nofollow" class="external text" href="https://github.com/jah2488/elm-companies"><i>jah2488/elm-companies</i></a><span class="reference-accessdate">, retrieved <span class="nowrap">2024-04-29</span></span></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=jah2488%2Felm-companies&rft.date=2024-04-29&rft.aulast=Herrick&rft.aufirst=Justin&rft_id=https%3A%2F%2Fgithub.com%2Fjah2488%2Felm-companies&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-127"><span class="mw-cite-backlink"><b><a href="#cite_ref-127">^</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://stackshare.io/purescript">"Why developers like PureScript"</a>. <i>StackShare</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=StackShare&rft.atitle=Why+developers+like+PureScript&rft_id=https%3A%2F%2Fstackshare.io%2Fpurescript&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-128"><span class="mw-cite-backlink"><b><a href="#cite_ref-128">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFTeam2019" class="citation web cs1">Team, Editorial (2019-01-08). <a rel="nofollow" class="external text" href="https://ecommercegermany.com/blog/allegro-all-you-need-to-know-about-the-best-polish-online-marketplace">"ALLEGRO - all you need to know about the best Polish online marketplace"</a>. <i>E-commerce Germany News</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=E-commerce+Germany+News&rft.atitle=ALLEGRO+-+all+you+need+to+know+about+the+best+Polish+online+marketplace&rft.date=2019-01-08&rft.aulast=Team&rft.aufirst=Editorial&rft_id=https%3A%2F%2Fecommercegermany.com%2Fblog%2Fallegro-all-you-need-to-know-about-the-best-polish-online-marketplace&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-129"><span class="mw-cite-backlink"><b><a href="#cite_ref-129">^</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.wappalyzer.com/technologies/web-frameworks/phoenix-framework/">"Websites using Phoenix Framework - Wappalyzer"</a>. <i>www.wappalyzer.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=www.wappalyzer.com&rft.atitle=Websites+using+Phoenix+Framework+-+Wappalyzer&rft_id=https%3A%2F%2Fwww.wappalyzer.com%2Ftechnologies%2Fweb-frameworks%2Fphoenix-framework%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-oxfordFP-130"><span class="mw-cite-backlink"><b><a href="#cite_ref-oxfordFP_130-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.cs.ox.ac.uk/teaching/courses/2019-2020/fp/">"Functional Programming: 2019-2020"</a>. University of Oxford Department of Computer Science<span class="reference-accessdate">. Retrieved <span class="nowrap">28 April</span> 2020</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Functional+Programming%3A+2019-2020&rft.pub=University+of+Oxford+Department+of+Computer+Science&rft_id=https%3A%2F%2Fwww.cs.ox.ac.uk%2Fteaching%2Fcourses%2F2019-2020%2Ffp%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-imperialFP-131"><span class="mw-cite-backlink"><b><a href="#cite_ref-imperialFP_131-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.imperial.ac.uk/computing/current-students/courses/120_1/">"Programming I (Haskell)"</a>. Imperial College London Department of Computing<span class="reference-accessdate">. Retrieved <span class="nowrap">28 April</span> 2020</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Programming+I+%28Haskell%29&rft.pub=Imperial+College+London+Department+of+Computing&rft_id=https%3A%2F%2Fwww.imperial.ac.uk%2Fcomputing%2Fcurrent-students%2Fcourses%2F120_1%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-nottinghamFP-132"><span class="mw-cite-backlink">^ <a href="#cite_ref-nottinghamFP_132-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-nottinghamFP_132-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="https://www.nottingham.ac.uk/ugstudy/course/Computer-Science-BSc#yearsmodules">"Computer Science BSc - Modules"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">28 April</span> 2020</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+BSc+-+Modules&rft_id=https%3A%2F%2Fwww.nottingham.ac.uk%2Fugstudy%2Fcourse%2FComputer-Science-BSc%23yearsmodules&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-mitFP-133"><span class="mw-cite-backlink">^ <a href="#cite_ref-mitFP_133-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-mitFP_133-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="CITEREFAbelsonSussman1985" class="citation book cs1"><a href="/wiki/Hal_Abelson" title="Hal Abelson">Abelson, Hal</a>; <a href="/wiki/Gerald_Jay_Sussman" title="Gerald Jay Sussman">Sussman, Gerald Jay</a> (1985). <a rel="nofollow" class="external text" href="https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-6.html">"Preface to the Second Edition"</a>. <a rel="nofollow" class="external text" href="http://mitpress.mit.edu/sicp/"><i>Structure and Interpretation of Computer Programs</i></a> (2 ed.). MIT Press.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Preface+to+the+Second+Edition&rft.btitle=Structure+and+Interpretation+of+Computer+Programs&rft.edition=2&rft.pub=MIT+Press&rft.date=1985&rft.aulast=Abelson&rft.aufirst=Hal&rft.au=Sussman%2C+Gerald+Jay&rft_id=https%3A%2F%2Fmitpress.mit.edu%2Fsites%2Fdefault%2Ffiles%2Fsicp%2Ffull-text%2Fbook%2Fbook-Z-H-6.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-61A-134"><span class="mw-cite-backlink"><b><a href="#cite_ref-61A_134-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">2020-08-14</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%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-bootstrapworld-135"><span class="mw-cite-backlink"><b><a href="#cite_ref-bootstrapworld_135-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://twit.tv/shows/triangulation/episodes/196/">Emmanuel Schanzer of Bootstrap</a> interviewed on the TV show <i>Triangulation</i> on the <a href="/wiki/TWiT.tv" title="TWiT.tv">TWiT.tv</a> network</span> </li> <li id="cite_note-136"><span class="mw-cite-backlink"><b><a href="#cite_ref-136">^</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://home.adelphi.edu/sbloch/class/pbd/testimonials/">"Why Scheme for Introductory Programming?"</a>. <i>home.adelphi.edu</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=home.adelphi.edu&rft.atitle=Why+Scheme+for+Introductory+Programming%3F&rft_id=https%3A%2F%2Fhome.adelphi.edu%2Fsbloch%2Fclass%2Fpbd%2Ftestimonials%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> <li id="cite_note-137"><span class="mw-cite-backlink"><b><a href="#cite_ref-137">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFStaff2011" class="citation web cs1">Staff, IMACS (2011-06-03). <a rel="nofollow" class="external text" href="https://www.imacs.org/learn-computer-programming-using-scheme/">"What Is Scheme & Why Is it Beneficial for Students?"</a>. <i>IMACS – Making Better Thinkers for Life</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=IMACS+%E2%80%93+Making+Better+Thinkers+for+Life&rft.atitle=What+Is+Scheme+%26+Why+Is+it+Beneficial+for+Students%3F&rft.date=2011-06-03&rft.aulast=Staff&rft.aufirst=IMACS&rft_id=https%3A%2F%2Fwww.imacs.org%2Flearn-computer-programming-using-scheme%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></span> </li> </ol></div></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=Functional_programming&action=edit&section=26" title="Edit section: Further reading"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFAbelsonSussman1985" class="citation book cs1"><a href="/wiki/Hal_Abelson" title="Hal Abelson">Abelson, Hal</a>; <a href="/wiki/Gerald_Jay_Sussman" title="Gerald Jay Sussman">Sussman, Gerald Jay</a> (1985). <a rel="nofollow" class="external text" href="https://mitpress.mit.edu/9780262510363/structure-and-interpretation-of-computer-programs/"><i>Structure and Interpretation of Computer Programs</i></a>. MIT Press.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Structure+and+Interpretation+of+Computer+Programs&rft.pub=MIT+Press&rft.date=1985&rft.aulast=Abelson&rft.aufirst=Hal&rft.au=Sussman%2C+Gerald+Jay&rft_id=https%3A%2F%2Fmitpress.mit.edu%2F9780262510363%2Fstructure-and-interpretation-of-computer-programs%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></li> <li>Cousineau, Guy and Michel Mauny. <i>The Functional Approach to Programming</i>. Cambridge, UK: <a href="/wiki/Cambridge_University_Press" title="Cambridge University Press">Cambridge University Press</a>, 1998.</li> <li>Curry, Haskell Brooks and Feys, Robert and Craig, William. <i>Combinatory Logic</i>. Volume I. North-Holland Publishing Company, Amsterdam, 1958.</li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFCurryHindleySeldin1972" class="citation book cs1"><a href="/wiki/Haskell_Curry" title="Haskell Curry">Curry, Haskell B.</a>; <a href="/wiki/J._Roger_Hindley" title="J. Roger Hindley">Hindley, J. Roger</a>; <a href="/w/index.php?title=Jonathan_P._Seldin&action=edit&redlink=1" class="new" title="Jonathan P. Seldin (page does not exist)">Seldin, Jonathan P.</a> (1972). <i>Combinatory Logic</i>. Vol. II. Amsterdam: North Holland. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-7204-2208-5" title="Special:BookSources/978-0-7204-2208-5"><bdi>978-0-7204-2208-5</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Combinatory+Logic&rft.place=Amsterdam&rft.pub=North+Holland&rft.date=1972&rft.isbn=978-0-7204-2208-5&rft.aulast=Curry&rft.aufirst=Haskell+B.&rft.au=Hindley%2C+J.+Roger&rft.au=Seldin%2C+Jonathan+P.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></li> <li>Dominus, Mark Jason. <i><a rel="nofollow" class="external text" href="http://hop.perl.plover.com/book/pdf/HigherOrderPerl.pdf">Higher-Order Perl</a></i>. <a href="/wiki/Morgan_Kaufmann" class="mw-redirect" title="Morgan Kaufmann">Morgan Kaufmann</a>. 2005.</li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFFelleisenFindlerFlattKrishnamurthi2018" class="citation book cs1">Felleisen, Matthias; Findler, Robert; Flatt, Matthew; Krishnamurthi, Shriram (2018). <a rel="nofollow" class="external text" href="http://www.htdp.org"><i>How to Design Programs</i></a>. MIT Press.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=How+to+Design+Programs&rft.pub=MIT+Press&rft.date=2018&rft.aulast=Felleisen&rft.aufirst=Matthias&rft.au=Findler%2C+Robert&rft.au=Flatt%2C+Matthew&rft.au=Krishnamurthi%2C+Shriram&rft_id=http%3A%2F%2Fwww.htdp.org&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></li> <li>Graham, Paul. <i>ANSI Common LISP</i>. Englewood Cliffs, New Jersey: <a href="/wiki/Prentice_Hall" title="Prentice Hall">Prentice Hall</a>, 1996.</li> <li>MacLennan, Bruce J. <i>Functional Programming: Practice and Theory</i>. Addison-Wesley, 1990.</li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMichaelson2013" class="citation book cs1">Michaelson, Greg (10 April 2013). <i>An Introduction to Functional Programming Through Lambda Calculus</i>. Courier Corporation. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-486-28029-5" title="Special:BookSources/978-0-486-28029-5"><bdi>978-0-486-28029-5</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=An+Introduction+to+Functional+Programming+Through+Lambda+Calculus&rft.pub=Courier+Corporation&rft.date=2013-04-10&rft.isbn=978-0-486-28029-5&rft.aulast=Michaelson&rft.aufirst=Greg&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFO'SullivanStewartGoerzen2008" class="citation book cs1">O'Sullivan, Brian; Stewart, Don; Goerzen, John (2008). <a rel="nofollow" class="external text" href="http://book.realworldhaskell.org/read/"><i>Real World Haskell</i></a>. O'Reilly.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Real+World+Haskell&rft.pub=O%27Reilly&rft.date=2008&rft.aulast=O%27Sullivan&rft.aufirst=Brian&rft.au=Stewart%2C+Don&rft.au=Goerzen%2C+John&rft_id=http%3A%2F%2Fbook.realworldhaskell.org%2Fread%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></li> <li>Pratt, Terrence W. and <a href="/wiki/Marvin_Victor_Zelkowitz" class="mw-redirect" title="Marvin Victor Zelkowitz">Marvin Victor Zelkowitz</a>. <i>Programming Languages: Design and Implementation</i>. 3rd ed. Englewood Cliffs, New Jersey: <a href="/wiki/Prentice_Hall" title="Prentice Hall">Prentice Hall</a>, 1996.</li> <li>Salus, Peter H. <i>Functional and Logic Programming Languages</i>. Vol. 4 of Handbook of Programming Languages. Indianapolis, Indiana: <a href="/w/index.php?title=Macmillan_Technical_Publishing&action=edit&redlink=1" class="new" title="Macmillan Technical Publishing (page does not exist)">Macmillan Technical Publishing</a>, 1998.</li> <li>Thompson, Simon. <i>Haskell: The Craft of Functional Programming</i>. Harlow, England: <a href="/w/index.php?title=Addison-Wesley_Longman_Limited&action=edit&redlink=1" class="new" title="Addison-Wesley Longman Limited (page does not exist)">Addison-Wesley Longman Limited</a>, 1996.</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=Functional_programming&action=edit&section=27" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1235611614">.mw-parser-output .spoken-wikipedia{border:1px solid #a2a9b1;background-color:var(--background-color-interactive-subtle,#f8f9fa);margin:0.5em 0;padding:0.2em;line-height:1.5em;font-size:90%}.mw-parser-output .spoken-wikipedia-header{text-align:center}.mw-parser-output .spoken-wikipedia-listen-to{font-weight:bold}.mw-parser-output .spoken-wikipedia-files{text-align:center;margin-top:10px;margin-bottom:0.4em}.mw-parser-output .spoken-wikipedia-icon{float:left;margin-left:5px;margin-top:10px}.mw-parser-output .spoken-wikipedia-disclaimer{margin-left:60px;margin-top:10px;font-size:95%;line-height:1.4em}.mw-parser-output .spoken-wikipedia-footer{margin-top:10px;text-align:center}@media(min-width:720px){.mw-parser-output .spoken-wikipedia{width:20em;float:right;clear:right;margin-left:1em}}</style><div class="spoken-wikipedia noprint haudio"><div class="spoken-wikipedia-header"><span class="spoken-wikipedia-listen-to">Listen to this article</span> (<span class="duration"><span class="min">28</span> minutes</span>)</div><div class="spoken-wikipedia-files"><figure class="mw-halign-center" typeof="mw:File"><span><audio id="mwe_player_0" controls="" preload="none" data-mw-tmh="" class="mw-file-element" width="200" style="width:200px;" data-durationhint="1679" data-mwtitle="En-Functional_programming.ogg" data-mwprovider="wikimediacommons"><source src="//upload.wikimedia.org/wikipedia/commons/8/83/En-Functional_programming.ogg" type="audio/ogg; codecs="vorbis"" data-width="0" data-height="0" /><source src="//upload.wikimedia.org/wikipedia/commons/transcoded/8/83/En-Functional_programming.ogg/En-Functional_programming.ogg.mp3" type="audio/mpeg" data-transcodekey="mp3" data-width="0" data-height="0" /></audio></span><figcaption></figcaption></figure> </div><div class="spoken-wikipedia-icon"><span typeof="mw:File"><span title="Spoken Wikipedia"><img alt="Spoken Wikipedia icon" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/47/Sound-icon.svg/45px-Sound-icon.svg.png" decoding="async" width="45" height="34" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/47/Sound-icon.svg/68px-Sound-icon.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/47/Sound-icon.svg/90px-Sound-icon.svg.png 2x" data-file-width="128" data-file-height="96" /></span></span></div><div class="spoken-wikipedia-disclaimer"><a href="/wiki/File:En-Functional_programming.ogg" title="File:En-Functional programming.ogg">This audio file</a> was created from a revision of this article dated 25 August 2011<span style="display:none"> (<span class="bday dtstart published updated itvstart">2011-08-25</span>)</span>, and does not reflect subsequent edits.</div><div class="spoken-wikipedia-footer">(<a href="/wiki/Wikipedia:Media_help" class="mw-redirect" title="Wikipedia:Media help">Audio help</a> · <a href="/wiki/Wikipedia:Spoken_articles" title="Wikipedia:Spoken articles">More spoken articles</a>)</div></div> <ul><li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFFord" class="citation web cs1">Ford, Neal. <a rel="nofollow" class="external text" href="http://nealford.com/functionalthinking.html">"Functional thinking"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-11-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Functional+thinking&rft.aulast=Ford&rft.aufirst=Neal&rft_id=http%3A%2F%2Fnealford.com%2Ffunctionalthinking.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFAkhmechet2006" class="citation web cs1">Akhmechet, Slava (2006-06-19). <a rel="nofollow" class="external text" href="http://www.defmacro.org/ramblings/fp.html">"defmacro – Functional Programming For The Rest of Us"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2013-02-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=defmacro+%E2%80%93+Functional+Programming+For+The+Rest+of+Us&rft.date=2006-06-19&rft.aulast=Akhmechet&rft.aufirst=Slava&rft_id=http%3A%2F%2Fwww.defmacro.org%2Framblings%2Ffp.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFunctional+programming" class="Z3988"></span> An introduction</li> <li><i>Functional programming in Python</i> (by David Mertz): <a rel="nofollow" class="external text" href="http://gnosis.cx/publish/programming/charming_python_13.html">part 1</a>, <a rel="nofollow" class="external text" href="http://gnosis.cx/publish/programming/charming_python_16.html">part 2</a>, <a rel="nofollow" class="external text" href="http://gnosis.cx/publish/programming/charming_python_19.html">part 3</a></li></ul> <div class="navbox-styles"><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: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="Programming_paradigms_(Comparison_by_language)" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse 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"><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:Programming_paradigms_navbox" title="Template:Programming paradigms navbox"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Programming_paradigms_navbox" title="Template talk:Programming paradigms navbox"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Programming_paradigms_navbox" title="Special:EditPage/Template:Programming paradigms navbox"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Programming_paradigms_(Comparison_by_language)" style="font-size:114%;margin:0 4em"><a href="/wiki/Programming_paradigm" title="Programming paradigm">Programming paradigms</a> (<a href="/wiki/Comparison_of_multi-paradigm_programming_languages" title="Comparison of multi-paradigm programming languages">Comparison by language</a>)</div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Imperative_programming" title="Imperative programming">Imperative</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" 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/Structured_programming" title="Structured programming">Structured</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/Jackson_structured_programming" title="Jackson structured programming">Jackson structures</a></li> <li><a href="/wiki/Block_(programming)" title="Block (programming)">Block-structured</a></li> <li><a href="/wiki/Modular_programming" title="Modular programming">Modular</a></li> <li><a href="/wiki/Non-structured_programming" title="Non-structured programming">Non-structured</a></li> <li><a href="/wiki/Procedural_programming" title="Procedural programming">Procedural</a></li> <li><a href="/wiki/Programming_in_the_large_and_programming_in_the_small" title="Programming in the large and programming in the small">Programming in the large and in the small</a></li> <li><a href="/wiki/Design_by_contract" title="Design by contract">Design by contract</a></li> <li><a href="/wiki/Invariant-based_programming" title="Invariant-based programming">Invariant-based</a></li> <li><a href="/wiki/Nested_function" title="Nested function">Nested function</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-oriented</a><br />(<a href="/wiki/Comparison_of_programming_languages_(object-oriented_programming)" title="Comparison of programming languages (object-oriented programming)">comparison</a>, <a href="/wiki/List_of_object-oriented_programming_languages" title="List of object-oriented programming languages">list</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/Class-based_programming" title="Class-based programming">Class-based</a>, <a href="/wiki/Prototype-based_programming" title="Prototype-based programming">Prototype-based</a>, <a href="/wiki/Object-based_language" title="Object-based language">Object-based</a></li> <li><a href="/wiki/Agent-oriented_programming" title="Agent-oriented programming">Agent</a></li> <li><a href="/wiki/Immutable_object" title="Immutable object">Immutable object</a></li> <li><a href="/wiki/Persistent_programming_language" title="Persistent programming language">Persistent</a></li> <li><a href="/wiki/Uniform_Function_Call_Syntax" title="Uniform Function Call Syntax">Uniform Function Call Syntax</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/Declarative_programming" title="Declarative programming">Declarative</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" 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 class="mw-selflink selflink">Functional</a><br />(<a href="/wiki/Comparison_of_functional_programming_languages" title="Comparison of functional programming languages">comparison</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/Recursion_(computer_science)" title="Recursion (computer science)">Recursive</a></li> <li><a href="/wiki/Anonymous_function" title="Anonymous function">Anonymous function</a> (<a href="/wiki/Partial_application" title="Partial application">Partial application</a>)</li> <li><a href="/wiki/Higher-order_programming" title="Higher-order programming">Higher-order</a></li> <li><a href="/wiki/Purely_functional_programming" title="Purely functional programming">Purely functional</a></li> <li><a href="/wiki/Total_functional_programming" title="Total functional programming">Total</a></li> <li><a href="/wiki/Strict_programming_language" title="Strict programming language">Strict</a></li> <li><a href="/wiki/Generalized_algebraic_data_type" title="Generalized algebraic data type">GADTs</a></li> <li><a href="/wiki/Dependent_type" title="Dependent type">Dependent types</a></li> <li><a href="/wiki/Functional_logic_programming" title="Functional logic programming">Functional logic</a></li> <li><a href="/wiki/Tacit_programming" title="Tacit programming">Point-free style</a></li> <li><a href="/wiki/Expression-oriented_programming_language" title="Expression-oriented programming language">Expression-oriented</a></li> <li><a href="/wiki/Applicative_programming_language" title="Applicative programming language">Applicative</a>, <a href="/wiki/Concatenative_programming_language" title="Concatenative programming language">Concatenative</a></li> <li><a href="/wiki/Function-level_programming" title="Function-level programming">Function-level</a>, <a href="/wiki/Value-level_programming" title="Value-level programming">Value-level</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Dataflow_programming" title="Dataflow programming">Dataflow</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/Flow-based_programming" title="Flow-based programming">Flow-based</a></li> <li><a href="/wiki/Reactive_programming" title="Reactive programming">Reactive</a> (<a href="/wiki/Functional_reactive_programming" title="Functional reactive programming">Functional reactive</a>)</li> <li><a href="/wiki/Signal_programming" class="mw-redirect" title="Signal programming">Signals</a></li> <li><a href="/wiki/Stream_processing" title="Stream processing">Streams</a></li> <li><a href="/wiki/Synchronous_programming_language" title="Synchronous programming language">Synchronous</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Logic_programming" title="Logic programming">Logic</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/Abductive_logic_programming" title="Abductive logic programming">Abductive logic</a></li> <li><a href="/wiki/Answer_set_programming" title="Answer set programming">Answer set</a></li> <li><a href="/wiki/Constraint_programming" title="Constraint programming">Constraint</a> (<a href="/wiki/Constraint_logic_programming" title="Constraint logic programming">Constraint logic</a>)</li> <li><a href="/wiki/Inductive_logic_programming" title="Inductive logic programming">Inductive logic</a></li> <li><a href="/wiki/Nondeterministic_programming" title="Nondeterministic programming">Nondeterministic</a></li> <li><a href="/wiki/Ontology_language" title="Ontology language">Ontology</a></li> <li><a href="/wiki/Probabilistic_logic_programming" title="Probabilistic logic programming">Probabilistic logic</a></li> <li><a href="/wiki/Query_language" title="Query language">Query</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Domain-specific_language" title="Domain-specific language">DSL</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/Algebraic_modeling_language" title="Algebraic modeling language">Algebraic modeling</a></li> <li><a href="/wiki/Array_programming" title="Array programming">Array</a></li> <li><a href="/wiki/Automata-based_programming" title="Automata-based programming">Automata-based</a> (<a href="/wiki/Action_language" title="Action language">Action</a>)</li> <li><a href="/wiki/Command_language" title="Command language">Command</a> (<a href="/wiki/Spacecraft_command_language" title="Spacecraft command language">Spacecraft</a>)</li> <li><a href="/wiki/Differentiable_programming" title="Differentiable programming">Differentiable</a></li> <li><a href="/wiki/End-user_development" title="End-user development">End-user</a></li> <li><a href="/wiki/Grammar-oriented_programming" title="Grammar-oriented programming">Grammar-oriented</a></li> <li><a href="/wiki/Interface_description_language" title="Interface description language">Interface description</a></li> <li><a href="/wiki/Language-oriented_programming" title="Language-oriented programming">Language-oriented</a></li> <li><a href="/wiki/List_comprehension" title="List comprehension">List comprehension</a></li> <li><a href="/wiki/Low-code_development_platform" title="Low-code development platform">Low-code</a></li> <li><a href="/wiki/Modeling_language" title="Modeling language">Modeling</a></li> <li><a href="/wiki/Natural-language_programming" title="Natural-language programming">Natural language</a></li> <li><a href="/wiki/Non-English-based_programming_languages" title="Non-English-based programming languages">Non-English-based</a></li> <li><a href="/wiki/Page_description_language" title="Page description language">Page description</a></li> <li><a href="/wiki/Pipeline_(software)" title="Pipeline (software)">Pipes</a> and <a href="/wiki/Filter_(software)" title="Filter (software)">filters</a></li> <li><a href="/wiki/Probabilistic_programming" title="Probabilistic programming">Probabilistic</a></li> <li><a href="/wiki/Quantum_programming" title="Quantum programming">Quantum</a></li> <li><a href="/wiki/Scientific_programming_language" title="Scientific programming language">Scientific</a></li> <li><a href="/wiki/Scripting_language" title="Scripting language">Scripting</a></li> <li><a href="/wiki/Set_theoretic_programming" title="Set theoretic programming">Set-theoretic</a></li> <li><a href="/wiki/Simulation_language" title="Simulation language">Simulation</a></li> <li><a href="/wiki/Stack-oriented_programming" title="Stack-oriented programming">Stack-based</a></li> <li><a href="/wiki/System_programming_language" title="System programming language">System</a></li> <li><a href="/wiki/Tactile_programming_language" title="Tactile programming language">Tactile</a></li> <li><a href="/wiki/Template_processor" title="Template processor">Templating</a></li> <li><a href="/wiki/Transformation_language" title="Transformation language">Transformation</a> (<a href="/wiki/Graph_rewriting" title="Graph rewriting">Graph rewriting</a>, <a href="/wiki/Production_system_(computer_science)" title="Production system (computer science)">Production</a>, <a href="/wiki/Pattern_matching" title="Pattern matching">Pattern</a>)</li> <li><a href="/wiki/Visual_programming_language" title="Visual programming language">Visual</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/Concurrent_computing" title="Concurrent computing">Concurrent</a>,<br /><a href="/wiki/Distributed_computing" title="Distributed computing">distributed</a>,<br /><a href="/wiki/Parallel_computing" title="Parallel computing">parallel</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Actor_model" title="Actor model">Actor-based</a></li> <li><a href="/wiki/Automatic_mutual_exclusion" title="Automatic mutual exclusion">Automatic mutual exclusion</a></li> <li><a href="/wiki/Choreographic_programming" title="Choreographic programming">Choreographic programming</a></li> <li><a href="/wiki/Concurrent_logic_programming" title="Concurrent logic programming">Concurrent logic</a> (<a href="/wiki/Concurrent_constraint_logic_programming" title="Concurrent constraint logic programming">Concurrent constraint logic</a>)</li> <li><a href="/wiki/Concurrent_object-oriented_programming" title="Concurrent object-oriented programming">Concurrent OO</a></li> <li><a href="/wiki/Macroprogramming" title="Macroprogramming">Macroprogramming</a></li> <li><a href="/wiki/Multitier_programming" title="Multitier programming">Multitier programming</a></li> <li><a href="/wiki/Organic_computing" title="Organic computing">Organic computing</a></li> <li><a href="/wiki/Parallel_programming_model" title="Parallel programming model">Parallel programming models</a></li> <li><a href="/wiki/Partitioned_global_address_space" title="Partitioned global address space">Partitioned global address space</a></li> <li><a href="/wiki/Process-oriented_programming" title="Process-oriented programming">Process-oriented</a></li> <li><a href="/wiki/Relativistic_programming" title="Relativistic programming">Relativistic programming</a></li> <li><a href="/wiki/Service-oriented_programming" title="Service-oriented programming">Service-oriented</a></li> <li><a href="/wiki/Structured_concurrency" title="Structured concurrency">Structured concurrency</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Metaprogramming" title="Metaprogramming">Metaprogramming</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Attribute-oriented_programming" title="Attribute-oriented programming">Attribute-oriented</a></li> <li><a href="/wiki/Automatic_programming" title="Automatic programming">Automatic</a> (<a href="/wiki/Inductive_programming" title="Inductive programming">Inductive</a>)</li> <li><a href="/wiki/Dynamic_programming_language" title="Dynamic programming language">Dynamic</a></li> <li><a href="/wiki/Extensible_programming" title="Extensible programming">Extensible</a></li> <li><a href="/wiki/Generic_programming" title="Generic programming">Generic</a></li> <li><a href="/wiki/Homoiconicity" title="Homoiconicity">Homoiconicity</a></li> <li><a href="/wiki/Interactive_programming" title="Interactive programming">Interactive</a></li> <li><a href="/wiki/Macro_(computer_science)" title="Macro (computer science)">Macro</a> (<a href="/wiki/Hygienic_macro" title="Hygienic macro">Hygienic</a>)</li> <li><a href="/wiki/Metalinguistic_abstraction" title="Metalinguistic abstraction">Metalinguistic abstraction</a></li> <li><a href="/wiki/Multi-stage_programming" title="Multi-stage programming">Multi-stage</a></li> <li><a href="/wiki/Program_synthesis" title="Program synthesis">Program synthesis</a> (<a href="/wiki/Bayesian_program_synthesis" title="Bayesian program synthesis">Bayesian</a>, <a href="/wiki/Inferential_programming" title="Inferential programming">Inferential</a>, <a href="/wiki/Programming_by_demonstration" title="Programming by demonstration">by demonstration</a>, <a href="/wiki/Programming_by_example" title="Programming by example">by example</a>)</li> <li><a href="/wiki/Reflective_programming" title="Reflective programming">Reflective</a></li> <li><a href="/wiki/Self-modifying_code" title="Self-modifying code">Self-modifying code</a></li> <li><a href="/wiki/Symbolic_programming" title="Symbolic programming">Symbolic</a></li> <li><a href="/wiki/Template_metaprogramming" title="Template metaprogramming">Template</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Separation_of_concerns" title="Separation of concerns">Separation<br />of concerns</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Aspect-oriented_programming" title="Aspect-oriented programming">Aspects</a></li> <li><a href="/wiki/Component-based_software_engineering" title="Component-based software engineering">Components</a></li> <li><a href="/wiki/Data-driven_programming" title="Data-driven programming">Data-driven</a></li> <li><a href="/wiki/Data-oriented_design" title="Data-oriented design">Data-oriented</a></li> <li><a href="/wiki/Event-driven_programming" title="Event-driven programming">Event-driven</a></li> <li><a href="/wiki/Feature-oriented_programming" title="Feature-oriented programming">Features</a></li> <li><a href="/wiki/Intentional_programming" title="Intentional programming">Intentional</a></li> <li><a href="/wiki/Literate_programming" title="Literate programming">Literate</a></li> <li><a href="/wiki/Role-oriented_programming" title="Role-oriented programming">Roles</a></li> <li><a href="/wiki/Subject-oriented_programming" title="Subject-oriented programming">Subjects</a></li></ul> </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"></div><div role="navigation" class="navbox" aria-labelledby="Types_of_programming_languages" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse 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:Types_of_programming_languages" title="Template:Types of programming languages"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Types_of_programming_languages" title="Template talk:Types of programming languages"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Types_of_programming_languages" title="Special:EditPage/Template:Types of programming languages"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Types_of_programming_languages" style="font-size:114%;margin:0 4em"><a href="/wiki/Programming_paradigm" title="Programming paradigm">Types of programming languages</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Level</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Machine_code" title="Machine code">Machine</a></li> <li><a href="/wiki/Assembly_language" title="Assembly language">Assembly</a></li> <li><a href="/wiki/Compiled_language" title="Compiled language">Compiled</a></li> <li><a href="/wiki/Interpreted_language" class="mw-redirect" title="Interpreted language">Interpreted</a></li></ul> <ul><li><a href="/wiki/Low-level_programming_language" title="Low-level programming language">Low-level</a></li> <li><a href="/wiki/High-level_programming_language" title="High-level programming language">High-level</a></li> <li><a href="/wiki/Very_high-level_programming_language" title="Very high-level programming language">Very high-level</a></li> <li><a href="/wiki/Esoteric_programming_language" title="Esoteric programming language">Esoteric</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Programming_language_generations" title="Programming language generations">Generation</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/First-generation_programming_language" title="First-generation programming language">First</a></li> <li><a href="/wiki/Second-generation_programming_language" title="Second-generation programming language">Second</a></li> <li><a href="/wiki/Third-generation_programming_language" title="Third-generation programming language">Third</a></li> <li><a href="/wiki/Fourth-generation_programming_language" title="Fourth-generation programming language">Fourth</a></li> <li><a href="/wiki/Fifth-generation_programming_language" title="Fifth-generation programming language">Fifth</a></li></ul> </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/Q193076#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/4198740-8">Germany</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh87007844">United States</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://catalogue.bnf.fr/ark:/12148/cb121910539">France</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://data.bnf.fr/ark:/12148/cb121910539">BnF data</a></span></li><li><span class="uid"><span class="rt-commentedText tooltip tooltip-dotted" title="funkcionální programování"><a rel="nofollow" class="external text" href="https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=ph572639&CON_LNG=ENG">Czech Republic</a></span></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=XX547935">Spain</a></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=987007541542105171">Israel</a></span></li></ul></div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐6b7f745dd4‐cqq9x Cached time: 20241125134443 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 1.640 seconds Real time usage: 1.931 seconds Preprocessor visited node count: 9428/1000000 Post‐expand include size: 294348/2097152 bytes Template argument size: 7228/2097152 bytes Highest expansion depth: 16/100 Expensive parser function count: 31/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 512145/5000000 bytes Lua time usage: 1.049/10.000 seconds Lua memory usage: 8451340/52428800 bytes Lua Profile: dataWrapper <mw.lua:672> 180 ms 17.0% MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::callParserFunction 180 ms 17.0% ? 140 ms 13.2% type 80 ms 7.5% recursiveClone <mwInit.lua:45> 40 ms 3.8% date 40 ms 3.8% MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::preprocess 40 ms 3.8% MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::gsub 40 ms 3.8% MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::getAllExpandedArguments 40 ms 3.8% MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::sub 40 ms 3.8% [others] 240 ms 22.6% Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 1633.767 1 -total 48.13% 786.301 2 Template:Reflist 18.36% 299.968 71 Template:Cite_web 10.48% 171.300 21 Template:Cite_journal 8.13% 132.807 4 Template:Navbox 7.92% 129.313 1 Template:Programming_paradigms_navbox 6.97% 113.937 22 Template:Cite_book 6.72% 109.713 7 Template:Citation_needed 5.70% 93.191 7 Template:Fix 5.68% 92.821 1 Template:Harvnb --> <!-- Saved in parser cache with key enwiki:pcache:idhash:10933-0!canonical and timestamp 20241125134443 and revision id 1257148813. 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=Functional_programming&oldid=1257148813">https://en.wikipedia.org/w/index.php?title=Functional_programming&oldid=1257148813</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:Functional_programming" title="Category:Functional programming">Functional programming</a></li><li><a href="/wiki/Category:Programming_paradigms" title="Category:Programming paradigms">Programming paradigms</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:_DOI_inactive_as_of_November_2024" title="Category:CS1 maint: DOI inactive as of November 2024">CS1 maint: DOI inactive as of November 2024</a></li><li><a href="/wiki/Category:CS1_French-language_sources_(fr)" title="Category:CS1 French-language sources (fr)">CS1 French-language sources (fr)</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_matches_Wikidata" title="Category:Short description matches Wikidata">Short description matches 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_February_2017" title="Category:Articles with unsourced statements from February 2017">Articles with unsourced statements from February 2017</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_July_2018" title="Category:Articles with unsourced statements from July 2018">Articles with unsourced statements from July 2018</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_June_2014" title="Category:Articles with unsourced statements from June 2014">Articles with unsourced statements from June 2014</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_April_2015" title="Category:Articles with unsourced statements from April 2015">Articles with unsourced statements from April 2015</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_August_2022" title="Category:Articles with unsourced statements from August 2022">Articles with unsourced statements from August 2022</a></li><li><a href="/wiki/Category:Articles_with_hAudio_microformats" title="Category:Articles with hAudio microformats">Articles with hAudio microformats</a></li><li><a href="/wiki/Category:Spoken_articles" title="Category:Spoken articles">Spoken articles</a></li><li><a href="/wiki/Category:Articles_with_example_C_code" title="Category:Articles with example C code">Articles with example C 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 13 November 2024, at 14:04<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=Functional_programming&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-565f7699fc-blbzp","wgBackendResponseTime":200,"wgPageParseReport":{"limitreport":{"cputime":"1.640","walltime":"1.931","ppvisitednodes":{"value":9428,"limit":1000000},"postexpandincludesize":{"value":294348,"limit":2097152},"templateargumentsize":{"value":7228,"limit":2097152},"expansiondepth":{"value":16,"limit":100},"expensivefunctioncount":{"value":31,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":512145,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 1633.767 1 -total"," 48.13% 786.301 2 Template:Reflist"," 18.36% 299.968 71 Template:Cite_web"," 10.48% 171.300 21 Template:Cite_journal"," 8.13% 132.807 4 Template:Navbox"," 7.92% 129.313 1 Template:Programming_paradigms_navbox"," 6.97% 113.937 22 Template:Cite_book"," 6.72% 109.713 7 Template:Citation_needed"," 5.70% 93.191 7 Template:Fix"," 5.68% 92.821 1 Template:Harvnb"]},"scribunto":{"limitreport-timeusage":{"value":"1.049","limit":"10.000"},"limitreport-memusage":{"value":8451340,"limit":52428800},"limitreport-logs":"anchor_id_list = table#1 {\n [\"CITEREFAbelsonSussman1985\"] = 2,\n [\"CITEREFAkhmechet2006\"] = 1,\n [\"CITEREFArmstrong2007\"] = 1,\n [\"CITEREFBackus1978\"] = 1,\n [\"CITEREFBaker1994\"] = 1,\n [\"CITEREFBanz2017\"] = 1,\n [\"CITEREFBerthe2024\"] = 1,\n [\"CITEREFBloch2008\"] = 1,\n [\"CITEREFBugnion2016\"] = 1,\n [\"CITEREFCesariniThompson2009\"] = 1,\n [\"CITEREFChamberlinBoyce1974\"] = 1,\n [\"CITEREFChambers1998\"] = 1,\n [\"CITEREFChurch1940\"] = 1,\n [\"CITEREFCleis\"] = 1,\n [\"CITEREFClinger1987\"] = 1,\n [\"CITEREFClinger1998\"] = 1,\n [\"CITEREFCurryHindleySeldin1972\"] = 1,\n [\"CITEREFDaniel_FriedmanWilliam_ByrdOleg_KiselyovJason_Hemann2018\"] = 1,\n [\"CITEREFDavid_Mertz\"] = 1,\n [\"CITEREFDiehlHartelSestoft2000\"] = 1,\n [\"CITEREFDominus2005\"] = 1,\n [\"CITEREFEich2008\"] = 1,\n [\"CITEREFFelleisenFindlerFlattKrishnamurthi2018\"] = 1,\n [\"CITEREFFord\"] = 1,\n [\"CITEREFGosling\"] = 1,\n [\"CITEREFGraham2003\"] = 1,\n [\"CITEREFGuy_L._SteeleRichard_P._Gabriel1996\"] = 1,\n [\"CITEREFHartelHenk_MullerHugh_Glaser2004\"] = 1,\n [\"CITEREFHartheimer1987\"] = 1,\n [\"CITEREFHaskell_Brooks_CurryRobert_Feys1958\"] = 1,\n [\"CITEREFHerrick2024\"] = 1,\n [\"CITEREFHolywell2014\"] = 1,\n [\"CITEREFHudak1989\"] = 1,\n [\"CITEREFHudakHughesJonesWadler2007\"] = 1,\n [\"CITEREFHuet1973\"] = 1,\n [\"CITEREFHuet1976\"] = 1,\n [\"CITEREFHuet2002\"] = 1,\n [\"CITEREFHughes\"] = 1,\n [\"CITEREFHughes1984\"] = 1,\n [\"CITEREFIgor_PechtchanskiVivek_Sarkar2005\"] = 1,\n [\"CITEREFJohn_DeNero2019\"] = 1,\n [\"CITEREFJohn_Leonard2017\"] = 1,\n [\"CITEREFJohn_McCarthy1960\"] = 1,\n [\"CITEREFKennedyRusso2005\"] = 1,\n [\"CITEREFKidd\"] = 1,\n [\"CITEREFLandin1964\"] = 1,\n [\"CITEREFLandin1965a\"] = 1,\n [\"CITEREFLandin1965b\"] = 1,\n [\"CITEREFLandin1966b\"] = 1,\n [\"CITEREFLarson2009\"] = 1,\n [\"CITEREFLaunchbury1993\"] = 1,\n [\"CITEREFLaurikari2007\"] = 1,\n [\"CITEREFLeo_Cheung2017\"] = 1,\n [\"CITEREFLeroy\"] = 1,\n [\"CITEREFLeroy2018\"] = 1,\n [\"CITEREFLorimer2009\"] = 1,\n [\"CITEREFL’orange\"] = 1,\n [\"CITEREFMansell2008\"] = 1,\n [\"CITEREFMcCarthy1978\"] = 1,\n [\"CITEREFMertz\"] = 1,\n [\"CITEREFMichaelson2013\"] = 1,\n [\"CITEREFMinskyWeeks2008\"] = 1,\n [\"CITEREFMomtahan2009\"] = 1,\n [\"CITEREFNewbern\"] = 1,\n [\"CITEREFNovatchev\"] = 1,\n [\"CITEREFO\u0026#039;SullivanStewartGoerzen2008\"] = 1,\n [\"CITEREFPaulson1996\"] = 1,\n [\"CITEREFPeake2009\"] = 1,\n [\"CITEREFPeter_Bright2018\"] = 1,\n [\"CITEREFPeyton_JonesBurnettBlackwell2003\"] = 1,\n [\"CITEREFPeyton_JonesVytiniotisWeirichGeoffrey_Washburn2006\"] = 1,\n [\"CITEREFPiro2009\"] = 1,\n [\"CITEREFPountain\"] = 1,\n [\"CITEREFRobert_W._Harper2009\"] = 1,\n [\"CITEREFRodger2017\"] = 1,\n [\"CITEREFSims2006\"] = 1,\n [\"CITEREFSkarsaune2008\"] = 1,\n [\"CITEREFSpiewak2008\"] = 1,\n [\"CITEREFStaff2011\"] = 1,\n [\"CITEREFTeam2019\"] = 1,\n [\"CITEREFThe_Cain_Gang_Ltd.\"] = 1,\n [\"CITEREFTuring1937\"] = 1,\n [\"CITEREFTurner2004\"] = 1,\n [\"CITEREFVanderbauwhede2020\"] = 1,\n [\"CITEREFWakeling2007\"] = 1,\n [\"CITEREFWells1993\"] = 1,\n [\"CITEREFWilliams2013\"] = 1,\n [\"CITEREFde_MouraUllrich2021\"] = 1,\n [\"CITEREFvan_Rossum2009\"] = 1,\n}\ntemplate_list = table#1 {\n [\"!\"] = 1,\n [\"Authority control\"] = 1,\n [\"Cbignore\"] = 1,\n [\"Citation\"] = 3,\n [\"Citation needed\"] = 7,\n [\"Cite book\"] = 22,\n [\"Cite conference\"] = 15,\n [\"Cite journal\"] = 21,\n [\"Cite magazine\"] = 1,\n [\"Cite thesis\"] = 1,\n [\"Cite web\"] = 71,\n [\"DEFAULTSORT:Functional programming\"] = 1,\n [\"For\"] = 1,\n [\"Harvnb\"] = 1,\n [\"ISBN\"] = 3,\n [\"Main\"] = 7,\n [\"Notelist\"] = 1,\n [\"Portal\"] = 1,\n [\"Programming paradigms navbox\"] = 1,\n [\"Reflist\"] = 1,\n [\"Short description\"] = 1,\n [\"Spoken Wikipedia\"] = 1,\n [\"Triangulation\"] = 1,\n [\"Types of programming languages\"] = 1,\n [\"Webarchive\"] = 1,\n}\narticle_whitelist = table#1 {\n}\n","limitreport-profile":[["dataWrapper \u003Cmw.lua:672\u003E","180","17.0"],["MediaWiki\\Extension\\Scribunto\\Engines\\LuaSandbox\\LuaSandboxCallback::callParserFunction","180","17.0"],["?","140","13.2"],["type","80","7.5"],["recursiveClone \u003CmwInit.lua:45\u003E","40","3.8"],["date","40","3.8"],["MediaWiki\\Extension\\Scribunto\\Engines\\LuaSandbox\\LuaSandboxCallback::preprocess","40","3.8"],["MediaWiki\\Extension\\Scribunto\\Engines\\LuaSandbox\\LuaSandboxCallback::gsub","40","3.8"],["MediaWiki\\Extension\\Scribunto\\Engines\\LuaSandbox\\LuaSandboxCallback::getAllExpandedArguments","40","3.8"],["MediaWiki\\Extension\\Scribunto\\Engines\\LuaSandbox\\LuaSandboxCallback::sub","40","3.8"],["[others]","240","22.6"]]},"cachereport":{"origin":"mw-web.codfw.main-6b7f745dd4-cqq9x","timestamp":"20241125134443","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Functional programming","url":"https:\/\/en.wikipedia.org\/wiki\/Functional_programming","sameAs":"http:\/\/www.wikidata.org\/entity\/Q193076","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q193076","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-10-14T13:58:27Z","dateModified":"2024-11-13T14:04:04Z","headline":"programming paradigm based on applying and composing functions"}</script> </body> </html>