CINXE.COM
Funkcionální programování – Wikipedie
<!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-disabled skin-theme-clientpref-day vector-toc-available" lang="cs" dir="ltr"> <head> <meta charset="UTF-8"> <title>Funkcionální programování – Wikipedie</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-disabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )cswikimwclientpreferences=([^;]+)/);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":[",\t."," \t,"],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"ČSN basic dt","wgMonthNames":["","leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],"wgRequestId":"a8f3bdf1-97ed-4ce6-88e5-b92a099ffffc","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Funkcionální_programování","wgTitle":"Funkcionální programování","wgCurRevisionId":23700281,"wgRevisionId":23700281,"wgArticleId":22943,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Údržba:Články k úpravě","Údržba:Články s vyhýbavými slovy","Monitoring:Články s identifikátorem NKC","Monitoring:Články s identifikátorem PSH","Monitoring:Články s identifikátorem BNE","Monitoring:Články s identifikátorem BNF","Monitoring:Články s identifikátorem GND","Monitoring:Články s identifikátorem LCCN","Monitoring:Články s identifikátorem NLI","Funkcionální programování" ,"Paradigmata programování"],"wgPageViewLanguage":"cs","wgPageContentLanguage":"cs","wgPageContentModel":"wikitext","wgRelevantPageName":"Funkcionální_programování","wgRelevantArticleId":22943,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"cs","pageLanguageDir":"ltr","pageVariantFallbacks":"cs"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgRelatedArticlesCompat":[],"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q193076","wgCheckUserClientHintsHeadersJsApi":[ "brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":true,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","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","mediawiki.page.media","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp", "ext.gadget.WikiMiniAtlas","ext.gadget.OSMmapa","ext.gadget.direct-links-to-commons","ext.gadget.ReferenceTooltips","ext.gadget.courses","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=cs&modules=ext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.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=cs&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=cs&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.5"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/b/b1/Haskell-Logo.jpg"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="1142"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/b/b1/Haskell-Logo.jpg"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="761"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="609"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Funkcionální programování – Wikipedie"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//cs.m.wikipedia.org/wiki/Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD"> <link rel="alternate" type="application/x-wiki" title="Editovat" href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&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="Wikipedie (cs)"> <link rel="EditURI" type="application/rsd+xml" href="//cs.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://cs.wikipedia.org/wiki/Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.cs"> <link rel="alternate" type="application/atom+xml" title="Atom kanál Wikipedie." href="/w/index.php?title=Speci%C3%A1ln%C3%AD:Posledn%C3%AD_zm%C4%9Bny&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-Funkcionální_programování rootpage-Funkcionální_programování skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Přeskočit na obsah</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="Projekt"> <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="Hlavní 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">Hlavní 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">Hlavní menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">přesunout do postranního panelu</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">skrýt</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigace </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage" class="mw-list-item"><a href="/wiki/Hlavn%C3%AD_strana" title="Navštívit Hlavní stranu [z]" accesskey="z"><span>Hlavní strana</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/N%C3%A1pov%C4%9Bda:Obsah" title="Místo, kde najdete pomoc"><span>Nápověda</span></a></li><li id="n-helpdesk" class="mw-list-item"><a href="/wiki/Wikipedie:Pot%C5%99ebuji_pomoc" title="Pokud si nevíte rady, zeptejte se ostatních"><span>Potřebuji pomoc</span></a></li><li id="n-featuredcontent" class="mw-list-item"><a href="/wiki/Wikipedie:Nejlep%C5%A1%C3%AD_%C4%8Dl%C3%A1nky" title="Přehled článků, které jsou považovány za nejlepší na české Wikipedii"><span>Nejlepší články</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:N%C3%A1hodn%C3%A1_str%C3%A1nka" title="Přejít na náhodně vybranou stránku [x]" accesskey="x"><span>Náhodný článek</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Posledn%C3%AD_zm%C4%9Bny" title="Seznam posledních změn na této wiki [r]" accesskey="r"><span>Poslední změny</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedie:Port%C3%A1l_Wikipedie" title="O projektu, jak můžete pomoci, kde hledat"><span>Komunitní portál</span></a></li><li id="n-villagepump" class="mw-list-item"><a href="/wiki/Wikipedie:Pod_l%C3%ADpou" title="Hlavní diskusní fórum"><span>Pod lípou</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Hlavn%C3%AD_strana" 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="Wikipedie" src="/static/images/mobile/copyright/wikipedia-wordmark-cs.svg" style="width: 7.5em; height: 1.1875em;"> <img class="mw-logo-tagline" alt="Wikipedie: Otevřená encyklopedie" src="/static/images/mobile/copyright/wikipedia-tagline-cs.svg" width="118" height="13" style="width: 7.375em; 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/Speci%C3%A1ln%C3%AD:Hled%C3%A1n%C3%AD" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Prohledat tuto wiki [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Hledání</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="Hledat na Wikipedii" aria-label="Hledat na Wikipedii" autocapitalize="sentences" title="Prohledat tuto wiki [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Speciální:Hledání"> </div> <button class="cdx-button cdx-search-input__end-button">Hledat</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Osobní nástroje"> <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="Vzhled"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Změnit vzhled velikosti písma, šířky stránky a barvy" > <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="Vzhled" > <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">Vzhled</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="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_cs.wikipedia.org&uselang=cs" class=""><span>Podpořte Wikipedii</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=Speci%C3%A1ln%C3%AD:Vytvo%C5%99it_%C3%BA%C4%8Det&returnto=Funkcion%C3%A1ln%C3%AD+programov%C3%A1n%C3%AD" title="Doporučujeme vytvořit si účet a přihlásit se, ovšem není to povinné" class=""><span>Vytvoření účtu</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=Speci%C3%A1ln%C3%AD:P%C5%99ihl%C3%A1sit&returnto=Funkcion%C3%A1ln%C3%AD+programov%C3%A1n%C3%AD" title="Doporučujeme vám přihlásit se, ovšem není to povinné. [o]" accesskey="o" class=""><span>Přihlášení</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="Další možnosti" > <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="Osobní nástroje" > <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">Osobní nástroje</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Uživatelské 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="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_cs.wikipedia.org&uselang=cs"><span>Podpořte Wikipedii</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:Vytvo%C5%99it_%C3%BA%C4%8Det&returnto=Funkcion%C3%A1ln%C3%AD+programov%C3%A1n%C3%AD" title="Doporučujeme vytvořit si účet a přihlásit se, ovšem není to povinné"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Vytvoření účtu</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:P%C5%99ihl%C3%A1sit&returnto=Funkcion%C3%A1ln%C3%AD+programov%C3%A1n%C3%AD" title="Doporučujeme vám přihlásit se, ovšem není to povinné. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Přihlášení</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"> Stránky pro odhlášené editory <a href="/wiki/N%C3%A1pov%C4%9Bda:%C3%9Avod" aria-label="Více informací o editování"><span>dozvědět se více</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/Speci%C3%A1ln%C3%AD:Moje_p%C5%99%C3%ADsp%C4%9Bvky" title="Seznam editací provedených z této IP adresy [y]" accesskey="y"><span>Příspěvky</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Moje_diskuse" title="Diskuse o editacích provedených z této IP adresy [n]" accesskey="n"><span>Diskuse</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="Projekt"> <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="Obsah" 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">Obsah</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">přesunout do postranního panelu</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">skrýt</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">(úvod)</div> </a> </li> <li id="toc-Použití" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Použití"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Použití</span> </div> </a> <ul id="toc-Použití-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Historie" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Historie"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Historie</span> </div> </a> <ul id="toc-Historie-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Koncepty" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Koncepty"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Koncepty</span> </div> </a> <button aria-controls="toc-Koncepty-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>Přepnout podsekci Koncepty</span> </button> <ul id="toc-Koncepty-sublist" class="vector-toc-list"> <li id="toc-Funkce_vyššího_řádu" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Funkce_vyššího_řádu"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Funkce vyššího řádu</span> </div> </a> <ul id="toc-Funkce_vyššího_řádu-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Čistě_funkcionální" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Čistě_funkcionální"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Čistě funkcionální</span> </div> </a> <ul id="toc-Čistě_funkcionální-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Rekurze" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Rekurze"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>Rekurze</span> </div> </a> <ul id="toc-Rekurze-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Striktní,_nestriktní_a_líné_vyhodnocení" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Striktní,_nestriktní_a_líné_vyhodnocení"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.4</span> <span>Striktní, nestriktní a líné vyhodnocení</span> </div> </a> <ul id="toc-Striktní,_nestriktní_a_líné_vyhodnocení-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Funkcionální_programování_v_nefunkcionálních_jazycích" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Funkcionální_programování_v_nefunkcionálních_jazycích"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.5</span> <span>Funkcionální programování v nefunkcionálních jazycích</span> </div> </a> <ul id="toc-Funkcionální_programování_v_nefunkcionálních_jazycích-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Porovnání_funkcionálního_a_imperativního_programování" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Porovnání_funkcionálního_a_imperativního_programování"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Porovnání funkcionálního a imperativního programování</span> </div> </a> <button aria-controls="toc-Porovnání_funkcionálního_a_imperativního_programování-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>Přepnout podsekci Porovnání funkcionálního a imperativního programování</span> </button> <ul id="toc-Porovnání_funkcionálního_a_imperativního_programování-sublist" class="vector-toc-list"> <li id="toc-Simulování_stavu" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Simulování_stavu"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.1</span> <span>Simulování stavu</span> </div> </a> <ul id="toc-Simulování_stavu-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Záležitosti_efektivity" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Záležitosti_efektivity"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.2</span> <span>Záležitosti efektivity</span> </div> </a> <ul id="toc-Záležitosti_efektivity-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Programovací_styly" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Programovací_styly"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.3</span> <span>Programovací styly</span> </div> </a> <ul id="toc-Programovací_styly-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Reference" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Reference"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Reference</span> </div> </a> <ul id="toc-Reference-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Související_články" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Související_články"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Související články</span> </div> </a> <ul id="toc-Související_články-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Externí_odkazy" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Externí_odkazy"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Externí odkazy</span> </div> </a> <ul id="toc-Externí_odkazy-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="Obsah" 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="Přepnout obsah" > <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">Přepnout obsah</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">Funkcionální programování</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="Přejděte k článku v jiném jazyce. Je dostupný v 53 jazycích" > <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 jazyků</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="برمجة وظيفية – arabština" lang="ar" hreflang="ar" data-title="برمجة وظيفية" data-language-autonym="العربية" data-language-local-name="arabština" 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 – asturština" lang="ast" hreflang="ast" data-title="Programación funcional" data-language-autonym="Asturianu" data-language-local-name="asturština" class="interlanguage-link-target"><span>Asturianu</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="Функцыянальнае праграмаванне – běloruština" lang="be" hreflang="be" data-title="Функцыянальнае праграмаванне" data-language-autonym="Беларуская" data-language-local-name="běloruština" 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="Функционално програмиране – bulharština" lang="bg" hreflang="bg" data-title="Функционално програмиране" data-language-autonym="Български" data-language-local-name="bulharština" class="interlanguage-link-target"><span>Български</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="ফাংশনভিত্তিক প্রোগ্রামিং – bengálština" lang="bn" hreflang="bn" data-title="ফাংশনভিত্তিক প্রোগ্রামিং" data-language-autonym="বাংলা" data-language-local-name="bengálština" 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 – katalánština" lang="ca" hreflang="ca" data-title="Programació funcional" data-language-autonym="Català" data-language-local-name="katalánština" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Funktionsprogrammering" title="Funktionsprogrammering – dánština" lang="da" hreflang="da" data-title="Funktionsprogrammering" data-language-autonym="Dansk" data-language-local-name="dánština" 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 – němčina" lang="de" hreflang="de" data-title="Funktionale Programmierung" data-language-autonym="Deutsch" data-language-local-name="němčina" class="interlanguage-link-target"><span>Deutsch</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-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="Συναρτησιακός προγραμματισμός – řečtina" lang="el" hreflang="el" data-title="Συναρτησιακός προγραμματισμός" data-language-autonym="Ελληνικά" data-language-local-name="řečtina" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Functional_programming" title="Functional programming – angličtina" lang="en" hreflang="en" data-title="Functional programming" data-language-autonym="English" data-language-local-name="angličtina" class="interlanguage-link-target"><span>English</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 – španělština" lang="es" hreflang="es" data-title="Programación funcional" data-language-autonym="Español" data-language-local-name="španělština" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/Funktsionaalne_programmeerimine" title="Funktsionaalne programmeerimine – estonština" lang="et" hreflang="et" data-title="Funktsionaalne programmeerimine" data-language-autonym="Eesti" data-language-local-name="estonština" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/Programazio_funtzional" title="Programazio funtzional – baskičtina" lang="eu" hreflang="eu" data-title="Programazio funtzional" data-language-autonym="Euskara" data-language-local-name="baskičtina" 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="برنامهنویسی تابعی – perština" lang="fa" hreflang="fa" data-title="برنامهنویسی تابعی" data-language-autonym="فارسی" data-language-local-name="perština" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/Funktionaalinen_ohjelmointi" title="Funktionaalinen ohjelmointi – finština" lang="fi" hreflang="fi" data-title="Funktionaalinen ohjelmointi" data-language-autonym="Suomi" data-language-local-name="finština" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Programmation_fonctionnelle" title="Programmation fonctionnelle – francouzština" lang="fr" hreflang="fr" data-title="Programmation fonctionnelle" data-language-autonym="Français" data-language-local-name="francouzština" 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 – irština" lang="ga" hreflang="ga" data-title="Ríomhchlárú feidhmiúil" data-language-autonym="Gaeilge" data-language-local-name="irština" 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 – galicijština" lang="gl" hreflang="gl" data-title="Programación funcional" data-language-autonym="Galego" data-language-local-name="galicijština" class="interlanguage-link-target"><span>Galego</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="תכנות פונקציונלי – hebrejština" lang="he" hreflang="he" data-title="תכנות פונקציונלי" data-language-autonym="עברית" data-language-local-name="hebrejština" 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 – chorvatština" lang="hr" hreflang="hr" data-title="Funkcijsko programiranje" data-language-autonym="Hrvatski" data-language-local-name="chorvatština" class="interlanguage-link-target"><span>Hrvatski</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 – maďarština" lang="hu" hreflang="hu" data-title="Funkcionális programozás" data-language-autonym="Magyar" data-language-local-name="maďarština" class="interlanguage-link-target"><span>Magyar</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="Ֆունկցիոնալ ծրագրավորում – arménština" lang="hy" hreflang="hy" data-title="Ֆունկցիոնալ ծրագրավորում" data-language-autonym="Հայերեն" data-language-local-name="arménština" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Pemrograman_fungsional" title="Pemrograman fungsional – indonéština" lang="id" hreflang="id" data-title="Pemrograman fungsional" data-language-autonym="Bahasa Indonesia" data-language-local-name="indonéština" 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 – italština" lang="it" hreflang="it" data-title="Programmazione funzionale" data-language-autonym="Italiano" data-language-local-name="italština" class="interlanguage-link-target"><span>Italiano</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="関数型プログラミング – japonština" lang="ja" hreflang="ja" data-title="関数型プログラミング" data-language-autonym="日本語" data-language-local-name="japonština" class="interlanguage-link-target"><span>日本語</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="함수형 프로그래밍 – korejština" lang="ko" hreflang="ko" data-title="함수형 프로그래밍" data-language-autonym="한국어" data-language-local-name="korejština" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-la mw-list-item"><a href="https://la.wikipedia.org/wiki/Programmatura_functionalis" title="Programmatura functionalis – latina" lang="la" hreflang="la" data-title="Programmatura functionalis" data-language-autonym="Latina" data-language-local-name="latina" 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 – litevština" lang="lt" hreflang="lt" data-title="Funkcinis programavimas" data-language-autonym="Lietuvių" data-language-local-name="litevština" class="interlanguage-link-target"><span>Lietuvių</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="ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് – malajálamština" lang="ml" hreflang="ml" data-title="ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ്" data-language-autonym="മലയാളം" data-language-local-name="malajálamština" 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 – malajština" lang="ms" hreflang="ms" data-title="Pengaturcaraan kefungsian" data-language-autonym="Bahasa Melayu" data-language-local-name="malajština" 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 – mirandština" lang="mwl" hreflang="mwl" data-title="Porgramaçon funcional" data-language-autonym="Mirandés" data-language-local-name="mirandština" 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 – nizozemština" lang="nl" hreflang="nl" data-title="Functioneel programmeren" data-language-autonym="Nederlands" data-language-local-name="nizozemština" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Funksjonell_programmering" title="Funksjonell programmering – norština (bokmål)" lang="nb" hreflang="nb" data-title="Funksjonell programmering" data-language-autonym="Norsk bokmål" data-language-local-name="norština (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 – polština" lang="pl" hreflang="pl" data-title="Programowanie funkcyjne" data-language-autonym="Polski" data-language-local-name="polština" 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 – portugalština" lang="pt" hreflang="pt" data-title="Programação funcional" data-language-autonym="Português" data-language-local-name="portugalština" 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ă – rumunština" lang="ro" hreflang="ro" data-title="Programare funcțională" data-language-autonym="Română" data-language-local-name="rumunština" class="interlanguage-link-target"><span>Română</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="Функциональное программирование – ruština" lang="ru" hreflang="ru" data-title="Функциональное программирование" data-language-autonym="Русский" data-language-local-name="ruština" class="interlanguage-link-target"><span>Русский</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="Функціоналне проґрамованя – rusínština" lang="rue" hreflang="rue" data-title="Функціоналне проґрамованя" data-language-autonym="Русиньскый" data-language-local-name="rusínština" class="interlanguage-link-target"><span>Русиньскый</span></a></li><li class="interlanguage-link interwiki-sh mw-list-item"><a href="https://sh.wikipedia.org/wiki/Funkcijsko_programiranje" title="Funkcijsko programiranje – srbochorvatština" lang="sh" hreflang="sh" data-title="Funkcijsko programiranje" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="srbochorvatština" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</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 – slovenština" lang="sk" hreflang="sk" data-title="Funkcionálne programovanie" data-language-autonym="Slovenčina" data-language-local-name="slovenština" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/Programimi_funksional" title="Programimi funksional – albánština" lang="sq" hreflang="sq" data-title="Programimi funksional" data-language-autonym="Shqip" data-language-local-name="albánština" class="interlanguage-link-target"><span>Shqip</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="Функционално програмирање – srbština" lang="sr" hreflang="sr" data-title="Функционално програмирање" data-language-autonym="Српски / srpski" data-language-local-name="srbština" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Funktionell_programmering" title="Funktionell programmering – švédština" lang="sv" hreflang="sv" data-title="Funktionell programmering" data-language-autonym="Svenska" data-language-local-name="švédština" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-sw mw-list-item"><a href="https://sw.wikipedia.org/wiki/Uprogramishaji_kikadhia" title="Uprogramishaji kikadhia – svahilština" lang="sw" hreflang="sw" data-title="Uprogramishaji kikadhia" data-language-autonym="Kiswahili" data-language-local-name="svahilština" class="interlanguage-link-target"><span>Kiswahili</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ština" lang="ta" hreflang="ta" data-title="பணிமுறை நிரல் மொழி" data-language-autonym="தமிழ்" data-language-local-name="tamilština" 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="การเขียนโปรแกรมเชิงฟังก์ชัน – thajština" lang="th" hreflang="th" data-title="การเขียนโปรแกรมเชิงฟังก์ชัน" data-language-autonym="ไทย" data-language-local-name="thajština" 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 – turečtina" lang="tr" hreflang="tr" data-title="Fonksiyonel programlama" data-language-autonym="Türkçe" data-language-local-name="turečtina" 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="Функційне програмування – ukrajinština" lang="uk" hreflang="uk" data-title="Функційне програмування" data-language-autonym="Українська" data-language-local-name="ukrajinština" 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 – vietnamština" lang="vi" hreflang="vi" data-title="Lập trình hàm" data-language-autonym="Tiếng Việt" data-language-local-name="vietnamština" class="interlanguage-link-target"><span>Tiếng Việt</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="函数式编程 – čínština" lang="zh" hreflang="zh" data-title="函数式编程" data-language-autonym="中文" data-language-local-name="čínština" class="interlanguage-link-target"><span>中文</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="函數式編程 – kantonština" lang="yue" hreflang="yue" data-title="函數式編程" data-language-autonym="粵語" data-language-local-name="kantonština" 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="Editovat mezijazykové odkazy" class="wbc-editpage">Upravit odkazy</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="Jmenné prostory"> <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/Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD" title="Zobrazit obsahovou stránku [c]" accesskey="c"><span>Článek</span></a></li><li id="ca-talk" class="new vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Diskuse:Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&redlink=1" rel="discussion" class="new" title="Diskuse ke stránce (stránka neexistuje) [t]" accesskey="t"><span>Diskuse</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="Změnit variantu jazyka" > <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">čeština</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="Zobrazení"> <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/Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD"><span>Číst</span></a></li><li id="ca-ve-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit" title="Editovat tuto stránku [v]" accesskey="v"><span>Editovat</span></a></li><li id="ca-edit" class="collapsible vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit" title="Editovat zdrojový kód této stránky [e]" accesskey="e"><span>Editovat zdroj</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=history" title="Starší verze této stránky. [h]" accesskey="h"><span>Zobrazit historii</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Nástroje ke stránce"> <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="Nástroje" > <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">Nástroje</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">Nástroje</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">přesunout do postranního panelu</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">skrýt</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Další možnosti" > <div class="vector-menu-heading"> Akce </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/Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD"><span>Číst</span></a></li><li id="ca-more-ve-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit" title="Editovat tuto stránku [v]" accesskey="v"><span>Editovat</span></a></li><li id="ca-more-edit" class="collapsible vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit" title="Editovat zdrojový kód této stránky [e]" accesskey="e"><span>Editovat zdroj</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=history"><span>Zobrazit historii</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Obecné </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Co_odkazuje_na/Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD" title="Seznam všech wikistránek, které sem odkazují [j]" accesskey="j"><span>Odkazuje sem</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Souvisej%C3%ADc%C3%AD_zm%C4%9Bny/Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD" rel="nofollow" title="Nedávné změny stránek, na které je odkazováno [k]" accesskey="k"><span>Související změny</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=cs" title="Nahrát obrázky či jiná multimédia [u]" accesskey="u"><span>Načíst soubor</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Speci%C3%A1ln%C3%AD:Speci%C3%A1ln%C3%AD_str%C3%A1nky" title="Seznam všech speciálních stránek [q]" accesskey="q"><span>Speciální stránky</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&oldid=23700281" title="Trvalý odkaz na současnou verzi této stránky"><span>Trvalý odkaz</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=info" title="Více informací o této stránce"><span>Informace o stránce</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:Citovat&page=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&id=23700281&wpFormIdentifier=titleform" title="Informace o tom, jak citovat tuto stránku"><span>Citovat stránku</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:UrlShortener&url=https%3A%2F%2Fcs.wikipedia.org%2Fwiki%2FFunkcion%25C3%25A1ln%25C3%25AD_programov%25C3%25A1n%25C3%25AD"><span>Získat zkrácené URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:QrCode&url=https%3A%2F%2Fcs.wikipedia.org%2Fwiki%2FFunkcion%25C3%25A1ln%25C3%25AD_programov%25C3%25A1n%25C3%25AD"><span>Stáhnout QR kód</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"> Tisk/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:Kniha&bookcmd=book_creator&referer=Funkcion%C3%A1ln%C3%AD+programov%C3%A1n%C3%AD"><span>Vytvořit knihu</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Speci%C3%A1ln%C3%AD:DownloadAsPdf&page=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=show-download-screen"><span>Stáhnout jako PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&printable=yes" title="Tato stránka v podobě vhodné k tisku [p]" accesskey="p"><span>Verze k tisku</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"> Na jiných projektech </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="Odkaz na propojenou položku datového úložiště [g]" accesskey="g"><span>Položka Wikidat</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="Nástroje ke stránce"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Vzhled"> <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">Vzhled</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">přesunout do postranního panelu</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">skrýt</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">Z Wikipedie, otevřené encyklopedie</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="cs" dir="ltr"><table class="infobox noprint" style="text-align:center; width:200px;"> <tbody><tr style="background:#A7D7F9; text-align:center"> <th><span style="font-size: larger;"><a href="/wiki/Programovac%C3%AD_paradigma" title="Programovací paradigma">Programovací paradigmata</a></span> </th></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/Aspektov%C4%9B_orientovan%C3%A9_programov%C3%A1n%C3%AD" title="Aspektově orientované programování">Aspektově orientované</a></li></ul></div> </td></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/Deklarativn%C3%AD_programov%C3%A1n%C3%AD" title="Deklarativní programování">Deklarativní</a> (<a class="mw-selflink selflink">Funkcionální</a></li><li><a href="/wiki/Logick%C3%A9_programov%C3%A1n%C3%AD" title="Logické programování">Logické</a>)</li></ul></div> </td></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/Function-level_programov%C3%A1n%C3%AD" title="Function-level programování">Function-level</a></li></ul></div> </td></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/Generick%C3%A9_programov%C3%A1n%C3%AD" title="Generické programování">Generické</a></li></ul></div> </td></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/Imperativn%C3%AD_programov%C3%A1n%C3%AD" title="Imperativní programování">Imperativní</a></li></ul></div> </td></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/Metaprogramov%C3%A1n%C3%AD" title="Metaprogramování">Metaprogramování</a></li></ul></div> </td></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/Paraleln%C3%AD_programov%C3%A1n%C3%AD" title="Paralelní programování">Paralelní</a></li></ul></div> </td></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/Programov%C3%A1n%C3%AD_ve_velk%C3%A9m" title="Programování ve velkém">Programování ve velkém</a></li></ul></div> </td></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/Strukturovan%C3%A9_programov%C3%A1n%C3%AD" title="Strukturované programování">Strukturované</a> (<a href="/wiki/Objektov%C4%9B_orientovan%C3%A9_programov%C3%A1n%C3%AD" title="Objektově orientované programování">Objektově orientované</a></li><li><a href="/wiki/Rekurzivn%C3%AD_funkce_(programov%C3%A1n%C3%AD)" class="mw-redirect" title="Rekurzivní funkce (programování)">Rekurzivní</a>)</li></ul></div> </td></tr> <tr style=""> <td><div class="hlist"><ul><li><a href="/wiki/Diferencovateln%C3%A9_programov%C3%A1n%C3%AD" title="Diferencovatelné programování">Diferencovatelné</a></li></ul></div> </td></tr> <tr style=""> <td><div class="hlist"><ul><li><div class="noprint plainlinks navbar" style="background:none; padding:0; font-weight:normal;; font-size:xx-small;"><a href="/wiki/%C5%A0ablona:Programovac%C3%AD_paradigmata" title="Šablona:Programovací paradigmata"><span title="Zobrazit tuto šablonu" style="">z</span></a> <span style="font-size:80%;">•</span> <a href="/w/index.php?title=Diskuse_k_%C5%A1ablon%C4%9B:Programovac%C3%AD_paradigmata&action=edit&redlink=1" class="new" title="Diskuse k šabloně:Programovací paradigmata (stránka neexistuje)"><span title="Diskutovat o této šabloně" style="">d</span></a> <span style="font-size:80%;">•</span> <span class="editlink plainlinks" style=""><a class="external text" href="https://cs.wikipedia.org/w/index.php?title=%C5%A0ablona:Programovac%C3%AD_paradigmata&action=edit"><span title="Editovat tuto šablonu" style="">e</span></a></span></div></li></ul></div> </td></tr></tbody></table> <div class="noprint ambox labelced labelced-page labelced-page-type-content ambox-content plainlinks"> <div class="labelced_message"><div class="labelced_image ambox-image mbox-image"><span typeof="mw:File"><span><img alt="ikona" src="//upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Broom_icon.svg/48px-Broom_icon.svg.png" decoding="async" width="48" height="48" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Broom_icon.svg/72px-Broom_icon.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Broom_icon.svg/96px-Broom_icon.svg.png 2x" data-file-width="400" data-file-height="400" /></span></span></div> <div class="labelced_message_inner"> <div class="labelced_message_headline ambox-text">Tento článek potřebuje úpravy.</div> <div class="labelced_message_text hide-when-compact ambox-text">Můžete Wikipedii pomoci tím, že ho <span class="editlink plainlinks" style=""><a class="external text" href="https://cs.wikipedia.org/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit">vylepšíte</a></span>. Jak by měly články vypadat, popisují stránky <a href="/wiki/Wikipedie:Vzhled_a_styl" title="Wikipedie:Vzhled a styl">Vzhled a styl</a>, <a href="/wiki/Wikipedie:Encyklopedick%C3%BD_styl" title="Wikipedie:Encyklopedický styl">Encyklopedický styl</a> a <a href="/wiki/Wikipedie:Pr%C5%AFvodce_(odkazy)" title="Wikipedie:Průvodce (odkazy)">Odkazy</a>.</div> </div> </div><hr /> <div class="labelced_note hide-when-compact"> <div class="labelced_image"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/1/11/Preferences-system.svg/16px-Preferences-system.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/1/11/Preferences-system.svg/24px-Preferences-system.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/11/Preferences-system.svg/32px-Preferences-system.svg.png 2x" data-file-width="48" data-file-height="48" /></span></span></div> <div class="labelced_note_text ambox-text">Konkrétní problémy: <i><span title="zvýrazněno" style="background-color: #FFEFD5;">doleštit, správně dopřeložit</span></i></div> </div> </div> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/Soubor:Haskell-Logo.jpg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/b/b1/Haskell-Logo.jpg" decoding="async" width="185" height="176" class="mw-file-element" data-file-width="185" data-file-height="176" /></a><figcaption>Logo funkcionálního programovacího jazyka <a href="/wiki/Haskell_(programovac%C3%AD_jazyk)" title="Haskell (programovací jazyk)">Haskell</a>.</figcaption></figure> <p><b>Funkcionální programování</b> je <a href="/wiki/Deklarativn%C3%AD_programov%C3%A1n%C3%AD" title="Deklarativní programování">deklarativní</a> programovací <a href="/wiki/Programovac%C3%AD_paradigma" title="Programovací paradigma">paradigma</a>, které chápe výpočet jako vyhodnocení <a href="/wiki/Funkce_(matematika)" title="Funkce (matematika)">matematických funkcí</a>. Funkcionální programování má své kořeny v <a href="/wiki/Lambda_kalkul" title="Lambda kalkul">lambda-kalkulu</a>, formálním systému vyvinutém v 30. letech k vyšetřování definicí funkcí, jejich aplikace a rekurze. Mnoho funkcionálních programovacích jazyků může být považováno za rozšíření lambda kalkulu. </p><p>Výpočtem funkcionálního programu je tedy posloupnost vzájemně ekvivalentních výrazů, které se postupně zjednodušují. Výsledkem výpočtu, pokud se k němu podaří dospět, je výraz v dále nezjednodušitelné <i>normální formě</i>. Program je chápán jako jedna funkce obsahující vstupní parametry mající jediný výstup. Tato funkce pak může být dále rozložitelná na podfunkce. </p><p>V praxi je rozdíl mezi matematickou funkcí a představou funkce použité v <a href="/wiki/Imperativn%C3%AD_programov%C3%A1n%C3%AD" title="Imperativní programování">imperativním programování</a>. <a href="/wiki/Turing%C5%AFv_stroj#Subrutiny" title="Turingův stroj">Imperativní funkce</a> mohou mít <a href="/wiki/Vedlej%C5%A1%C3%AD_%C3%BA%C4%8Dinek_(programov%C3%A1n%C3%AD)" title="Vedlejší účinek (programování)">vedlejší účinky</a>, které mění stav programu. Z toho důvodu postrádají <a href="/wiki/Referen%C4%8Dn%C3%AD_transparentnost" class="mw-redirect" title="Referenční transparentnost">referenční transparentnost</a>: Stejné volání může vést k různým návratovým hodnotám v závislosti na stavu vykonávaného programu. Oproti tomu ve funkcionálním kódu návratové hodnoty funkcí záleží pouze na argumentech funkce, a tudíž dvě volání téže funkce se stejnými argumenty vrací vždy stejnou hodnotu. Eliminace vedlejších účinků může zjednodušit analýzu a pochopení chodu programu, což je jednou z klíčových motivací pro vývoj funkčního programování. </p><p>V praxi se můžeme setkat jak s <a href="/wiki/%C4%8Cist%C4%9B_funkcion%C3%A1ln%C3%AD" title="Čistě funkcionální">čistě funkcionálními</a> jazyky, které striktně vycházejí z teorie (např. FP, Haskell, Miranda, Hope), tak i s hybridními jazyky, které mohou obsahovat i prvky, které jsou v rozporu se základními principy funkcionálního programování. Například často citovaný „typicky“ funkcionální jazyk <a href="/wiki/Lisp" title="Lisp">Lisp</a> je ve skutečnosti jazykem hybridním, neboť umožňuje modifikovat hodnoty již definovaných proměnných. Mezi hybridní jazyky patří rovněž jazyky <a href="/wiki/Standard_ML" title="Standard ML">Standard ML</a>, <a href="/wiki/Scheme" title="Scheme">Scheme</a>, či <a href="/wiki/F_Sharp" title="F Sharp">F#</a>. Dále lze funkcionální jazyky dělit dle <a href="/wiki/Typov%C3%A1_kontrola" title="Typová kontrola">typové kontroly</a> na <i>typované</i> (<a href="/wiki/Haskell_(programovac%C3%AD_jazyk)" title="Haskell (programovací jazyk)">Haskell</a>, <a href="/wiki/F_Sharp" title="F Sharp">F#</a>, <a href="/wiki/Scala_(programovac%C3%AD_jazyk)" title="Scala (programovací jazyk)">Scala</a>, <a href="/wiki/OCaml" title="OCaml">OCaml</a>, <a href="/wiki/Idris" class="mw-disambig" title="Idris">Idris</a>, <a href="/wiki/Lean" class="mw-redirect" title="Lean">Lean</a>) a <i>netypované</i> (<a href="/wiki/Lisp" title="Lisp">Lisp</a>, <a href="/wiki/Scheme" title="Scheme">Scheme</a>). </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Použití"><span id="Pou.C5.BEit.C3.AD"></span>Použití</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=1" title="Editace sekce: Použití" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=1" title="Editovat zdrojový kód sekce Použití"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Funkcionální <a href="/wiki/Programovac%C3%AD_jazyk" title="Programovací jazyk">programovací jazyky</a>, především <a href="/wiki/%C4%8Cist%C4%9B_funkcion%C3%A1ln%C3%AD" title="Čistě funkcionální">čistě funkcionální</a>, se používají spíše v akademickém než komerčním prostředí. Přesto široké spektrum organizací využívá některé funkcionální programovací jazyky jako např. <a href="/wiki/Erlang_(programovac%C3%AD_jazyk)" title="Erlang (programovací jazyk)">Erlang</a>, <a href="/wiki/R_(programovac%C3%AD_jazyk)" title="R (programovací jazyk)">R</a> (<a href="/wiki/Statistika" title="Statistika">statistika</a>), <a href="/wiki/Mathematica" title="Mathematica">Mathematica</a> (symbolická matematika), <a href="/wiki/Haskell_(programovac%C3%AD_jazyk)" title="Haskell (programovací jazyk)">Haskell</a>, ML, J a K (<a href="/wiki/Finan%C4%8Dn%C3%AD_anal%C3%BDza" title="Finanční analýza">finanční analýza</a>) a doménově specifické programovací jazyky jako XQuery/<a href="/wiki/XSLT" class="mw-redirect" title="XSLT">XSLT</a> (<a href="/wiki/Extensible_Markup_Language" title="Extensible Markup Language">XML</a>). Dále jsou funkcionální programovací jazyky důležité pro některá odvětví informatiky, například zabývající se umělou inteligencí, formální specifikací, modelováním nebo rychlým prototypováním. </p> <div class="mw-heading mw-heading2"><h2 id="Historie">Historie</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=2" title="Editace sekce: Historie" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=2" title="Editovat zdrojový kód sekce Historie"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Prvopočátky funkcionálních jazyků najdeme již ve 30. letech 20. století. Tehdy profesor matematiky a filosofie na Princeton University <a href="/wiki/Alonzo_Church" title="Alonzo Church">Alonzo Church</a> (1903–1995) vytvořil netypovaný <a href="/wiki/Lambda_kalkul" title="Lambda kalkul">lambda kalkul</a> jako matematickou teorii funkcí. K nejznámějším Churchovým vědeckým přínosům patří také tzv. Churchova–Turingova teze o tom, že algoritmus je ekvivalentní pojmu funkce a Churchův teorém z roku 1936 o tom, že aritmetika je <a href="/wiki/Rozhodnutelnost" title="Rozhodnutelnost">nerozhodnutelná</a>. </p><p><a href="/wiki/Lambda_kalkul" title="Lambda kalkul">Lambda kalkul</a> poskytuje teoretickou podporu pro popis funkcí a jejich vyhodnocení. Ačkoliv je to více matematická abstrakce než programovací jazyk, vytváří dnes základy téměř všech funkcionálních jazyků. </p><p>Kombinatorická logika je variace lambda kalkulu, kde jsou lambda výrazy nahrazeny omezenou sadou primitivních funkcí – kombinátorů. Vytvořil ji Moses Schönfinkel a <a href="/wiki/Haskell_Brooks_Curry" title="Haskell Brooks Curry">Haskell Brooks Curry</a>. Původně ji vytvořili k dosažení čistšího přístupu k základům matematiky. Kombinatorická logika je obecně chápána víc abstraktně než <a href="/wiki/Lambda_kalkul" title="Lambda kalkul">Lambda kalkul</a> a ve vývoji ji předběhla. </p><p>Jeden z prvních jazyků, který v sobě zahrnoval funkcionální část, byl <a href="/wiki/LISP" class="mw-redirect" title="LISP">LISP</a>, vytvořený Johnem McCarthym pro <a href="/wiki/IBM" title="IBM">IBM</a> série 700/7000 vědeckých počítačů na konci 50. let. LISP představil mnoho vlastností, které můžeme najít v nynějších funkcionálních jazycích, ačkoliv LISP je technicky multi-paradigmatický jazyk. <a href="/wiki/Scheme" title="Scheme">Scheme</a> a Dylan byly pozdější pokusy zjednodušit a vylepšit LISP. </p><p>Informační procesní jazyk IPL je někdy uváděn jako první počítačový funkcionální jazyk. Je to jazyk pro manipulaci se seznamem znaků. Má svůj generátor funkcí, který se stará o to, aby funkce mohla přijmout funkci jako argument a vzhledem k tomu, že je to assembly-level jazyk, kód může být použit jako data, takže IPL může být považován za higher-order funkční. Každopádně hodně závisí na měnící se struktuře seznamu a podobných přímých vlastnostech. </p><p><a href="/wiki/Kenneth_E._Iverson" class="mw-redirect" title="Kenneth E. Iverson">Kenneth E. Iverson</a> vyvinul programovací jazyk <a href="/wiki/APL_(programovac%C3%AD_jazyk)" title="APL (programovací jazyk)">APL</a> na začátku 60. let a popsal ho roku 1962 ve své knize „A programming Language“. APL měl hlavní vliv na programovací jazyk FP <a href="/wiki/John_Backus" title="John Backus">Johna Backuse</a>. Na začátku 90. let, vytvořili Iverson a Roger Hui nástupce APL, J programming. Uprostřed let 90. Artur Whitney, který pracoval s Iversonem, vytvořil programovací jazyk K, který se používá v komerčním a finančním průmyslu. </p><p>John Backus představil programovací jazyk FP v roce 1977 ve své přednášce Can Programming Be Liberated From the von Neumann Style, když obdržel Turingovu cenu, která se uděluje za významný technický přínos pro oblast výpočetní techniky. Definoval funkcionální programy tak, že následují principy kompozice. Backusovy novinky popularizovaly výzkum funkcionálního programování, přestože zdůrazňovaly functional-level programming spíše než lambda kalkul, který byl spojován s funkcionálním programováním. </p><p>V 70. letech vytvořil Robin Milner na <a href="/wiki/Edinbursk%C3%A1_univerzita" title="Edinburská univerzita">universitě v Edinburghu</a> programovací jazyk ML, a David Turner vyvinul jazyk Miranda na universitě v Kentu. ML byl poté pozměněn do několika dialektů, z nichž jsou nyní nejběžnější <a href="/wiki/OCaml" title="OCaml">Objektive Caml</a> a <a href="/wiki/Standard_ML" title="Standard ML">Standard ML</a>. Programovací jazyk <a href="/wiki/Haskell_(programovac%C3%AD_jazyk)" title="Haskell (programovací jazyk)">Haskell</a> byl uvolněn<sup>[<a href="/wiki/Wikipedie:Vyhn%C4%9Bte_se_vyh%C3%BDbav%C3%BDm_slov%C5%AFm" title="Wikipedie:Vyhněte se vyhýbavým slovům"><span class="doplnte-zdroj" title="Původce nejasný">kdo?</span></a>]</sup> na konci osmdesátých let jako pokus skloubit dohromady odlišné přístupy, které byly objeveny v průběhu výzkumu funkcionálního programování. </p> <div class="mw-heading mw-heading2"><h2 id="Koncepty">Koncepty</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=3" title="Editace sekce: Koncepty" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=3" title="Editovat zdrojový kód sekce Koncepty"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Spousta konceptů a paradigmat je vlastní funkcionálnímu programování a cizí imperativnímu programování (včetně <a href="/wiki/Objektov%C4%9B_orientovan%C3%A9_programov%C3%A1n%C3%AD" title="Objektově orientované programování">objektově orientovaného programování</a>). Nicméně programovací jazyky jsou často hybridy několika programovacích paradigmat, takže programátoři používající hlavně imperativní mohou též používat některý z konceptů funkcionálního programování. </p> <div class="mw-heading mw-heading3"><h3 id="Funkce_vyššího_řádu"><span id="Funkce_vy.C5.A1.C5.A1.C3.ADho_.C5.99.C3.A1du"></span>Funkce vyššího řádu</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=4" title="Editace sekce: Funkce vyššího řádu" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=4" title="Editovat zdrojový kód sekce Funkce vyššího řádu"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Funkce jsou higher-order-function, česky <i>funkce vyššího řádu</i>, v případě, kdy mohou převzít nějakou funkci jako argument nebo navrátit funkci jako výsledek. (Derivace a neurčitý integrál jsou toho příkladem v matematice). </p><p> V následující ukázce je naznačena funkce vyššího řádu, protože jí je jako parametr předávána funkce zpětného volání.<sup id="cite_ref-:0_1-0" class="reference"><a href="#cite_note-:0-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></p><div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="c1">// Callback metoda, která se předává jako parametr do volané metody na řádku 12</span> <span class="linenos" data-line="2"></span><span class="kd">function</span><span class="w"> </span><span class="nx">callbackFunction</span><span class="p">(){</span> <span class="linenos" data-line="3"></span><span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'Já jsem zavolaná callBack metoda'</span><span class="p">);</span> <span class="linenos" data-line="4"></span><span class="p">}</span> <span class="linenos" data-line="5"></span> <span class="linenos" data-line="6"></span><span class="c1">// High order function</span> <span class="linenos" data-line="7"></span><span class="kd">function</span><span class="w"> </span><span class="nx">higherOrderFunction</span><span class="p">(</span><span class="nx">calledFunction</span><span class="p">){</span> <span class="linenos" data-line="8"></span><span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'Já jsem high order metoda'</span><span class="p">)</span> <span class="linenos" data-line="9"></span><span class="w"> </span><span class="nx">calledFunction</span><span class="p">()</span> <span class="linenos" data-line="10"></span><span class="p">}</span> <span class="linenos" data-line="11"></span> <span class="linenos" data-line="12"></span><span class="nx">higherOrderFunction</span><span class="p">(</span><span class="nx">callbackFunction</span><span class="p">);</span> </pre></div><p>V následující ukázce je kód pro výpočet plochy kružnice a jejího obvodu:</p><div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="c1">// logika na spočítání obvodu kružnice</span> <span class="linenos" data-line="2"></span><span class="kd">const</span><span class="w"> </span><span class="nx">calculatePerimeter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">radius</span><span class="p">){</span><span class="w"> </span> <span class="linenos" data-line="3"></span><span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[];</span> <span class="linenos" data-line="4"></span><span class="w"> </span><span class="k">for</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">radius</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="linenos" data-line="5"></span><span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">diameter</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="nb">Math</span><span class="p">.</span><span class="nx">PI</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nx">radius</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span> <span class="linenos" data-line="6"></span><span class="w"> </span><span class="nx">output</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">diameter</span><span class="p">)</span> <span class="linenos" data-line="7"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="8"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">output</span><span class="p">;</span> <span class="linenos" data-line="9"></span><span class="p">}</span> <span class="linenos" data-line="10"></span> <span class="linenos" data-line="11"></span><span class="c1">// logika na spočítání plochy kružnice</span> <span class="linenos" data-line="12"></span><span class="kd">const</span><span class="w"> </span><span class="nx">calculateArea</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">radius</span><span class="p">){</span><span class="w"> </span> <span class="linenos" data-line="13"></span><span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[];</span> <span class="linenos" data-line="14"></span><span class="w"> </span><span class="k">for</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">radius</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="linenos" data-line="15"></span><span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">area</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Math</span><span class="p">.</span><span class="nx">PI</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nx">radius</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="nx">radius</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span> <span class="linenos" data-line="16"></span><span class="w"> </span><span class="nx">output</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">area</span><span class="p">)</span> <span class="linenos" data-line="17"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="18"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">output</span><span class="p">;</span> <span class="linenos" data-line="19"></span><span class="p">}</span> <span class="linenos" data-line="20"></span> <span class="linenos" data-line="21"></span><span class="c1">// zavolání výpočtu plochy dvou kružnic, první s poloměrem 1 a druhé s poloměrem 5</span> <span class="linenos" data-line="22"></span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">calculateArea</span><span class="p">([</span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">5</span><span class="p">]));</span><span class="w"> </span><span class="c1">// výstup volání [3.141592653589793, 78.53981633974483]</span> <span class="linenos" data-line="23"></span> <span class="linenos" data-line="24"></span><span class="c1">// zavolání výpočtu obvodu dvou kružnic, první s poloměrem 1 a druhé s poloměrem 5</span> <span class="linenos" data-line="25"></span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">calculatePerimeter</span><span class="p">([</span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">5</span><span class="p">]));</span><span class="w"> </span><span class="c1">// výstup volání [6.283185307, 31.415926536]</span> </pre></div> <p>Pokud se využije funkce vyššího řádu, může vypadat kód zhruba následovně: </p> <div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="c1">// logika na výpočet plochy kružnice</span> <span class="linenos" data-line="2"></span><span class="kd">const</span><span class="w"> </span><span class="nx">getArea</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">radius</span><span class="p">){</span> <span class="linenos" data-line="3"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">Math</span><span class="p">.</span><span class="nx">PI</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nx">radius</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nx">radius</span><span class="p">;</span> <span class="linenos" data-line="4"></span><span class="p">}</span> <span class="linenos" data-line="5"></span> <span class="linenos" data-line="6"></span><span class="c1">// logika na spočítání obvodu kružnice</span> <span class="linenos" data-line="7"></span><span class="kd">const</span><span class="w"> </span><span class="nx">getPerimeter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">radius</span><span class="p">){</span> <span class="linenos" data-line="8"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mf">2</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nb">Math</span><span class="p">.</span><span class="nx">PI</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nx">radius</span><span class="p">;</span> <span class="linenos" data-line="9"></span><span class="p">}</span> <span class="linenos" data-line="10"></span> <span class="linenos" data-line="11"></span><span class="c1">// znovupoužitelná funkce vyššího řádu</span> <span class="linenos" data-line="12"></span><span class="c1">// první argument je radius kružnice a druhý jakákoliv logika, která se má uplatnit na radius</span> <span class="linenos" data-line="13"></span><span class="c1">// výstup logiky je poté přidán do pole output</span> <span class="linenos" data-line="14"></span><span class="kd">const</span><span class="w"> </span><span class="nx">calculate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">radius</span><span class="p">,</span><span class="w"> </span><span class="nx">passedLogic</span><span class="p">){</span><span class="w"> </span> <span class="linenos" data-line="15"></span><span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[];</span> <span class="linenos" data-line="16"></span><span class="w"> </span><span class="k">for</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">radius</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="linenos" data-line="17"></span><span class="w"> </span><span class="nx">output</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">passedLogic</span><span class="p">(</span><span class="nx">radius</span><span class="p">[</span><span class="nx">i</span><span class="p">]))</span> <span class="linenos" data-line="18"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="19"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">output</span><span class="p">;</span> <span class="linenos" data-line="20"></span><span class="p">}</span> <span class="linenos" data-line="21"></span> <span class="linenos" data-line="22"></span><span class="c1">// zavolání výpočtu plochy dvou kružnic, první s poloměrem 1 a druhé s poloměrem 5</span> <span class="linenos" data-line="23"></span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">calculate</span><span class="p">([</span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">5</span><span class="p">],</span><span class="w"> </span><span class="nx">getArea</span><span class="p">));</span><span class="w"> </span><span class="c1">// výstup volání [3.141592653589793, 78.53981633974483]</span> <span class="linenos" data-line="24"></span> <span class="linenos" data-line="25"></span><span class="c1">// zavolání výpočtu obvodu dvou kružnic, první s poloměrem 1 a druhé s poloměrem 5</span> <span class="linenos" data-line="26"></span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">calculate</span><span class="p">([</span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">5</span><span class="p">],</span><span class="w"> </span><span class="nx">getPerimeter</span><span class="p">));</span><span class="w"> </span><span class="c1">// výstup volání [6.283185307, 31.415926536]</span> </pre></div> <p>Hlavní výhodou funkcí vyššího řádu je jejich znovupoužitelnost a zjednodušení čitelnosti kódu. V ukázce je vidět, že díky metodě calculate je pouze jedna funkce na výpočet a samotná logika je předávána v parametru passedLogic. </p><p>Kód, napsaný pomocí funkce vyššího řádu je stručný a modulární. Každá funkce dělá svou vlastní práci a nic zde není potřeba opakovat.<sup id="cite_ref-:0_1-1" class="reference"><a href="#cite_note-:0-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Čistě_funkcionální"><span id=".C4.8Cist.C4.9B_funkcion.C3.A1ln.C3.AD"></span>Čistě funkcionální</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=5" title="Editace sekce: Čistě funkcionální" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=5" title="Editovat zdrojový kód sekce Čistě funkcionální"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/%C4%8Cist%C4%9B_funkcion%C3%A1ln%C3%AD" title="Čistě funkcionální">Čistě funkcionální</a> programy nemají žádné vedlejší účinky. To činí jejich chování jednodušším na pochopení a naprogramování. Například výsledek použití čisté funkce na čistý argument nezávisí na pořadí vyhodnocení. V důsledku jazyk, který nemá žádné jiné funkce než čistě funkcionální (jako například <a href="/wiki/Haskell_(programovac%C3%AD_jazyk)" title="Haskell (programovací jazyk)">Haskell</a>), může použít <a href="/w/index.php?title=Evaluace_(programov%C3%A1n%C3%AD)&action=edit&redlink=1" class="new" title="Evaluace (programování) (stránka neexistuje)">evaluaci</a> call-by-need. Nicméně ne všechny funkcionální jazyky jsou čistě funkcionální. Jazyky z rodiny Lispu nejsou čistě funkcionální, protože způsobují vedlejší účinky. </p><p>Jelikož čistě funkcionální funkce neupravují sdílené proměnné, může jich být paralelně zavoláno více, aniž by se navzájem ovlivňovaly. Tyto funkce jsou proto <a href="/w/index.php?title=Vl%C3%A1knov%C4%9B_bezpe%C4%8Dn%C3%A9&action=edit&redlink=1" class="new" title="Vláknově bezpečné (stránka neexistuje)">vláknově bezpečné</a>, a to umožňuje interpretům a kompilátorům používat strategii, při níž jsou argumenty funkce vyhodnocovány současně s tělem funkce (anglicky call-by-future). </p><p>Příkladem těchto funkcí jsou např. matematické funkce získávající maximum a minimum z předaného pole hodnot. Tyto funkce také pro stejný vstup vrátí vždy stejný výstup. <sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> </p><p><a href="/wiki/%C4%8Cist%C4%9B_funkcion%C3%A1ln%C3%AD" title="Čistě funkcionální">Čistě funkcionální</a> programovací jazyky typicky vyžadují <a href="/wiki/Referen%C4%8Dn%C3%AD_pr%C5%AFhlednost" title="Referenční průhlednost">referenční průhlednost</a>, což znamená, že pokud dva výrazy mají stejné hodnoty, může být jeden dosazen za druhý v jakémkoliv výrazu bez ovlivnění výsledku. Například: </p> <pre>y = f(x) * f(x); </pre> <p>Pokud je funkce f(x) čistě funkcionální, může kompilátor kód převést a transformovat program takto: </p> <pre>z = f(x); y = z * z; </pre> <p>a eliminuje druhé vyhodnocení (pravděpodobně zbytečného volání funkce f(x)). Tato optimalizace se nazývá eliminace společného podvýrazu (common subexpression elimination). </p><p>Nicméně jestliže má funkce vedlejší účinek, volání funkce nemůže být eliminováno. Podívejte se na následující program: </p> <pre>y = random() * random(); </pre> <p>Druhé volání random nemůže být eliminováno, protože návratová hodnota se může lišit od předchozího volání. Podobně </p> <pre>y = printf("x") * printf("x"); </pre> <p>nemůže být optimalizováno, i kdyby printf vrátil stejnou hodnotu v obou případech, chybějící druhé volání by způsobilo změnu ve výstupu programu. Většina kompilátorů pro imperativní programovací jazyky detekuje čisté funkce a provádí obecnou eliminaci podvýrazu pro volání čistých funkcí. Předkompilované knihovny většinou nevyhodnocují tuto informaci a tím zabraňují optimalizaci externí funkce. Některé kompilátory, jako například <a href="/wiki/GCC" title="GCC">GCC</a>, přidávají výraz explicitně označující externí funkce jako čisté, takže mohou být optimalizovány i za přítomnosti předkompilovaných knihoven. </p> <div class="mw-heading mw-heading3"><h3 id="Rekurze">Rekurze</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=6" title="Editace sekce: Rekurze" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=6" title="Editovat zdrojový kód sekce Rekurze"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Opakování je ve funkcionálních jazycích obvykle provedeno pomocí <a href="/wiki/Rekurze" title="Rekurze">rekurze</a>. <a href="/wiki/Rekurzivn%C3%AD_funkce" class="mw-disambig" title="Rekurzivní funkce">Rekurzivní funkce</a> vyvolávají samy sebe, čímž dovolují opakování programu. <a href="/wiki/Koncov%C3%A1_rekurze" title="Koncová rekurze">Koncová rekurze</a> (tail recursion) může být rozpoznána a optimalizována kompilátorem do stejného kódu, který se používá na implementaci opakování, čti <i>cyklu</i>, u imperativních jazyků. Programovací jazyk Scheme standardně vyžaduje další implementaci<sup>[<a href="/wiki/Wikipedie:Vyhn%C4%9Bte_se_vyh%C3%BDbav%C3%BDm_slov%C5%AFm" title="Wikipedie:Vyhněte se vyhýbavým slovům"><span class="doplnte-zdroj" title="Původce nejasný">kdo?</span></a>]</sup> k rozpoznávání těchto funkcí. </p><p>Obecné vzory rekurzí mohou být změněny<sup>[<a href="/wiki/Wikipedie:Vyhn%C4%9Bte_se_vyh%C3%BDbav%C3%BDm_slov%C5%AFm" title="Wikipedie:Vyhněte se vyhýbavým slovům"><span class="doplnte-zdroj" title="Původce nejasný">kdo?</span></a>]</sup> za použití higher order funkcí, <a href="/w/index.php?title=Catamorphismus&action=edit&redlink=1" class="new" title="Catamorphismus (stránka neexistuje)">catamorphismus</a> a <a href="/w/index.php?title=Anamorphismus&action=edit&redlink=1" class="new" title="Anamorphismus (stránka neexistuje)">anamorphismus</a> jsou toho nejzřejmější příklady. Takové higher order funkce hrají obvykle roli podobnou vestavěným kontrolním strukturám, jako jsou smyčky v imperativních programovacích jazycích. </p> <div class="mw-heading mw-heading3"><h3 id="Striktní,_nestriktní_a_líné_vyhodnocení"><span id="Striktn.C3.AD.2C_nestriktn.C3.AD_a_l.C3.ADn.C3.A9_vyhodnocen.C3.AD"></span>Striktní, nestriktní a líné vyhodnocení</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=7" title="Editace sekce: Striktní, nestriktní a líné vyhodnocení" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=7" title="Editovat zdrojový kód sekce Striktní, nestriktní a líné vyhodnocení"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Funkcionální jazyky mohou být kategorizovány podle toho, používají-li striktní nebo nestriktní vyhodnocení, což jsou koncepty, které říkají, jak budou zpracovány argumenty funkce při vyhodnocování výrazu. Pro ilustraci se podívejte na následující dvě funkce f a g. </p> <pre>f:=x^2+x+1 g:=x+y </pre> <p>Následující výraz bude vyhodnocen jednou z těchto cest. </p> <pre>f(g(1, 4)) </pre> <p>Výpočet vnitřnější funkce g jako první. </p> <pre>f(g(1, 4)) → f(1+4) → f(5) → 5^2+5+1 → 31 </pre> <p>Výpočet vnější funkce f jako první. </p> <pre>f(g(1, 4)) → g(1,4)^2+g(1,4)+1 → (1+4)^2+(1+4)+1 → 5^2+5+1 → 31 </pre> <p>V prvním případě se jedná o striktní výpočet, argumenty funkce jsou vyhodnoceny před voláním funkce; vedle toho druhý případ je příklad nestriktního vyhodnocení, kde jsou argumenty přenechány ve funkci nevyhodnocené a volání funkce určuje, kdy budou argumenty vyhodnoceny. </p><p>Striktní vyhodnocení je efektivnější. Ve striktním výpočtu je argument počítán jednou, zatímco v „blbě implementovaném“ nestriktním může být počítán vícekrát, jak můžete vidět v příkladu nahoře, kde je funkce <code>g</code> vypočítána vícekrát. Striktní výpočet je také jednodušší implementovat, pokud argumenty předané datové funkci jsou datové hodnoty, v nestriktním výpočtu mohou být argumenty výrazy. A ve výsledku první funkcionální jazyky jako <a href="/wiki/LISP" class="mw-redirect" title="LISP">LISP</a>, <a href="/w/index.php?title=ISWIM&action=edit&redlink=1" class="new" title="ISWIM (stránka neexistuje)">ISWIM</a> a <a href="/w/index.php?title=ML_(programovac%C3%AD_jazyk)&action=edit&redlink=1" class="new" title="ML (programovací jazyk) (stránka neexistuje)">ML</a> spolu s hodně novými funkcionálními jazyky používají striktní výpočet. </p><p>Nicméně jsou tu důvody preferovat nestriktní výpočet. Lambda kalkul poskytuje silnější teoretické základy pro jazyky, které používají nestriktní výpočet. Nestriktní výpočet používají nejvíce definiční jazyky. Například podporuje nekonečné datové struktury jako seznam všech kladných proměnných typu integer nebo všech prvočísel. S nestriktním výpočtem jsou tyto struktury vypočítány pouze v kontextu, kde je vyžadována konečná délka. To vedlo k vývoji líného výpočtu, což je typ nestriktního výpočtu, kde výsledek počátečního výpočtu kteréhokoliv argumentu může být sdílen přes výpočtovou sekvenci. Ve výsledku není argument spočítán nikdy více než jednou. Líný výpočet je používán hlavně línými moderními <a href="/wiki/%C4%8Cist%C4%9B_funkcion%C3%A1ln%C3%AD" title="Čistě funkcionální">čistě funkcionálními</a> jazyky jako je <a href="/wiki/Miranda_(programovac%C3%AD_jazyk)" title="Miranda (programovací jazyk)">Miranda</a>, <a href="/wiki/Clean" title="Clean">Clean</a> a <a href="/wiki/Haskell_(programovac%C3%AD_jazyk)" title="Haskell (programovací jazyk)">Haskell</a>. </p> <div class="mw-heading mw-heading3"><h3 id="Funkcionální_programování_v_nefunkcionálních_jazycích"><span id="Funkcion.C3.A1ln.C3.AD_programov.C3.A1n.C3.AD_v_nefunkcion.C3.A1ln.C3.ADch_jazyc.C3.ADch"></span>Funkcionální programování v nefunkcionálních jazycích</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=8" title="Editace sekce: Funkcionální programování v nefunkcionálních jazycích" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=8" title="Editovat zdrojový kód sekce Funkcionální programování v nefunkcionálních jazycích"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Je možné používat funkcionální styl programování i v jazycích, které nejsou považovány za funkcionální. Některé nefunkcionální jazyky si od funkcionálních jazyků půjčily některé rysy jako higher-order funkce a zpracování seznamů. To dělá jednodušší používání tohoto stylu v těchto jazycích. Funkcionální struktury jako higher-order funkce a zpracování seznamů můžeme implementovat v C++ pomocí knihoven. V C můžeme použít ukazatele na funkce, abychom získali některé z efektů higher-order funkcí, například můžeme implementovat běžnou funkci mapování za použití funkčních ukazatelů. Deklarativní specifické jazyky jako <a href="/wiki/SQL" title="SQL">SQL</a> a <a href="/wiki/Lex_(software)" title="Lex (software)">Lex</a>/<a href="/wiki/Yacc" title="Yacc">Yacc</a>, které nejsou Turing-kompletní, používají některé elementy funkcionálního programování, hlavně při vyvarování se nestálých hodnot. </p> <div class="mw-heading mw-heading2"><h2 id="Porovnání_funkcionálního_a_imperativního_programování"><span id="Porovn.C3.A1n.C3.AD_funkcion.C3.A1ln.C3.ADho_a_imperativn.C3.ADho_programov.C3.A1n.C3.AD"></span>Porovnání funkcionálního a imperativního programování</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=9" title="Editace sekce: Porovnání funkcionálního a imperativního programování" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=9" title="Editovat zdrojový kód sekce Porovnání funkcionálního a imperativního programování"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Funkcionální programování je velmi odlišné od imperativního programování. Nejvýraznější rozdíl je v tom, že funkcionální programování zabraňuje vedlejším efektům, které jsou používané v imperativním programování k implementování stavů vstupů a výstupů. <a href="/wiki/%C4%8Cist%C4%9B_funkcion%C3%A1ln%C3%AD" title="Čistě funkcionální">Čistě funkcionální</a> programování zakazuje vedlejší účinky. Zakázání vedlejších efektů zajišťuje referenční průhlednost, která ulehčuje verifikaci, optimalizaci a paralelizaci programů a ulehčuje psaní automatických nástrojů k provedení těchto procesů. </p><p>Higher-order funkce jsou zřídka používány ve starších imperativních jazycích. Kde by tradiční imperativní programování nejspíše použilo smyčku k prozkoumání seznamu, funkcionální styl by často použil higher-order funkci mapování, která převezme jako argument funkci a seznam, aplikuje funkci na každý element seznamu a vrátí seznam výsledků. </p> <div class="mw-heading mw-heading3"><h3 id="Simulování_stavu"><span id="Simulov.C3.A1n.C3.AD_stavu"></span>Simulování stavu</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=10" title="Editace sekce: Simulování stavu" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=10" title="Editovat zdrojový kód sekce Simulování stavu"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Některé úlohy se zdají být většinou implementovány pomocí stavu. <a href="/wiki/%C4%8Cist%C4%9B_funkcion%C3%A1ln%C3%AD" title="Čistě funkcionální">Čistě funkcionální</a> programování provádí tyto úlohy a vstupně výstupní úlohy (jako je třeba přijmutí uživatelského vstupu a výstup na obrazovku) jinou cestou. Čistě funkcionální jazyk, jako je Haskell, je implementuje za použití <a href="/wiki/Mon%C3%A1da_(funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD)" title="Monáda (funkcionální programování)">monád</a>, pocházejících z <a href="/wiki/Teorie_kategori%C3%AD" title="Teorie kategorií">teorie kategorií</a>. Monády jsou extrémně silný nástroj a nabízí intuitivní cestu jak modelovat <a href="/w/index.php?title=Status_(po%C4%8D%C3%ADta%C4%8D)&action=edit&redlink=1" class="new" title="Status (počítač) (stránka neexistuje)">stav</a> (a jiné vedlejší účinky jako například vstupy a výstupy) v imperativním stylu bez ztráty čistoty. Zatímco existující monády jsou jednoduché na použití, pro spoustu lidí je těžké definovat novou monádu (která je občas potřebná pro určité typy knihoven). Alternativní metody jako třeba <s><a href="/w/index.php?title=Hoareho_logika&action=edit&redlink=1" class="new" title="Hoareho logika (stránka neexistuje)">Hoareho logika</a> a</s> <a href="/w/index.php?title=Unik%C3%A1tnost&action=edit&redlink=1" class="new" title="Unikátnost (stránka neexistuje)">unikátnost</a> byly vytvořeny pro sledování vedlejších efektů v programu. Některé moderní vývojové jazyky používají systém efektů k jednoznačnému zjištění vedlejších efektů. </p> <div class="mw-heading mw-heading3"><h3 id="Záležitosti_efektivity"><span id="Z.C3.A1le.C5.BEitosti_efektivity"></span>Záležitosti efektivity</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=11" title="Editace sekce: Záležitosti efektivity" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=11" title="Editovat zdrojový kód sekce Záležitosti efektivity"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Funkcionální programovací jazyky mají automatické spravování paměti s <a href="/wiki/Garbage_collection" title="Garbage collection">garbage collection</a>, v kontrastu se staršími programovacími jazyky jako je <a href="/wiki/C_(programovac%C3%AD_jazyk)" title="C (programovací jazyk)">C</a> a <a href="/wiki/Pascal_(programovac%C3%AD_jazyk)" title="Pascal (programovací jazyk)">Pascal</a>, které používají explicitní spravování paměti. Funkcionální programovací jazyky jsou náročnější na systémové prostředky. Nicméně spousta imperativních programovacích jazyků jako <a href="/wiki/Java_(programovac%C3%AD_jazyk)" title="Java (programovací jazyk)">Java</a>, <a href="/wiki/Perl" title="Perl">Perl</a>, <a href="/wiki/Python" title="Python">Python</a>, <a href="/wiki/Ruby" title="Ruby">Ruby</a> mají také automatickou správu paměti a taky jsou náročné na systémové prostředky. </p><p>Efektivita funkcionálních programovací jazyků se v poslední době zlepšila. Programy, které provádí náročné numerické výpočty ve funkcionálních jazycích jako OCaml a Clean, jsou stejně rychlé jako v C. Pro programy, které pracují s velkými maticemi a vícerozměrnými databázemi, byly vymyšleny a rychlostně optimalizovány array-funkcionální jazyky (jako J a K). Přestože <a href="/wiki/%C4%8Cist%C4%9B_funkcion%C3%A1ln%C3%AD" title="Čistě funkcionální">čistě funkcionální</a> jazyky jsou obecně považovány za pomalejší, jakýkoliv imperativní algoritmus se dá vyjádřit v těchto jazycích, přinejhorším s (asymptotickým) logaritmickým zpomalením. Navíc neměnnost dat může v mnoha případech vést k větší efektivitě díky tomu, že <a href="/wiki/P%C5%99eklada%C4%8D" title="Překladač">kompilátor</a> může používat předpoklady, které by byly v imperativních jazycích nejisté. </p> <div class="mw-heading mw-heading3"><h3 id="Programovací_styly"><span id="Programovac.C3.AD_styly"></span>Programovací styly</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=12" title="Editace sekce: Programovací styly" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=12" title="Editovat zdrojový kód sekce Programovací styly"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Imperativní jazyky směřují k sérii kroků, vykonané programem při provádění akce, kdežto funkcionální programy směřují ke kompozici a poskládání funkcí často bez upřesňujících explicitních kroků. Jednoduchý příklad dvou řešení stejného problému za použití multiparadigmatického jazyka (Python): </p> <pre># imperative style target = [] for x in source_list: x = G(x) x = F(x) target.append(x) </pre> <p>Ve funkcionální verzi to vypadá jinak </p> <pre># functional style # FP-oriented languages often have standard compose() compose2 = lambda F, G: lambda x: (F(G(x)) target = map(compose2(F,G), source_list) </pre> <p>V kontrastu k imperativnímu stylu, který popisuje kroky potřebné k vytvoření položky target, funkcionální styl popisuje matematický vztah mezi položkami source_list a target. </p><p>Jedná se ale o nepraktické školometné ukázky, v praxi by se ale v pythonu použilo jedno z následujících řešení, kombinující oba přístupy: </p> <pre># řešení 1 target = [] for x in source_list: target.append(F(G(x))) </pre> <pre># řešení 2 target = [F(G(x)) for x in source_list] </pre> <div class="mw-heading mw-heading2"><h2 id="Reference">Reference</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=13" title="Editace sekce: Reference" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=13" title="Editovat zdrojový kód sekce Reference"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-references-wrap"><ol class="references"> <li id="cite_note-:0-1"><span class="mw-cite-backlink">↑ <a href="#cite_ref-:0_1-0"><sup style="font-style: italic; font-weight: bold; vertical-align: top">a</sup></a> <a href="#cite_ref-:0_1-1"><sup style="font-style: italic; font-weight: bold; vertical-align: top">b</sup></a></span> <span class="reference-text"><cite style="font-style:normal;"> Higher Order Functions in JavaScript – Explained with Practical Examples. <i>freeCodeCamp.org</i> [online]. 2023-01-03 [cit. 2023-05-03]. <a rel="nofollow" class="external text" href="https://www.freecodecamp.org/news/higher-order-functions-in-javascript-explained/">Dostupné online</a>. (anglicky)</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rfr_id=info:sid/cs.wikipedia.org:templatecitaceelperiodika&rft.jtitle=freeCodeCamp.org&rft_id=https%3A%2F%2Fwww.freecodecamp.org%2Fnews%2Fhigher-order-functions-in-javascript-explained%2F&rft.atitle=Higher+Order+Functions+in+JavaScript+%E2%80%93+Explained+with+Practical+Examples&rft.date=2023-01-03"><span style="display:none"> </span></span></span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><cite class="book" style="font-style:normal;">ELLIOTT, Eric. <i>Master the JavaScript Interview: What is a Pure Function?</i> [online]. 2021-08-24 [cit. 2023-05-04]. <a rel="nofollow" class="external text" href="https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076bec976">Dostupné online</a>. (anglicky)</cite><span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/cs.wikipedia.org:templatecitaceelmonografie&rft.btitle=Master+the+JavaScript+Interview%3A+What+is+a+Pure+Function%3F&rft_id=https%3A%2F%2Fmedium.com%2Fjavascript-scene%2Fmaster-the-javascript-interview-what-is-a-pure-function-d1c076bec976&rft.aulast=Elliott&rft.aufirst=Eric"><span style="display:none"> </span></span></span> </li> </ol></div> <div class="mw-heading mw-heading2"><h2 id="Související_články"><span id="Souvisej.C3.ADc.C3.AD_.C4.8Dl.C3.A1nky"></span>Související články</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=14" title="Editace sekce: Související články" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=14" title="Editovat zdrojový kód sekce Související články"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Function-level_programov%C3%A1n%C3%AD" title="Function-level programování">Function-level programování</a></li> <li><a href="/wiki/%C4%8Cist%C4%9B_funkcion%C3%A1ln%C3%AD" title="Čistě funkcionální">Čistě funkcionální</a></li> <li><a href="/wiki/Imperativn%C3%AD_programov%C3%A1n%C3%AD" title="Imperativní programování">Imperativní programování</a></li> <li><a href="/wiki/Procedur%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD" class="mw-redirect" title="Procedurální programování">Procedurální programování</a></li> <li><a href="/wiki/Deklarativn%C3%AD_programov%C3%A1n%C3%AD" title="Deklarativní programování">Deklarativní programování</a></li> <li><a href="/wiki/Logick%C3%A9_programov%C3%A1n%C3%AD" title="Logické programování">Logické programování</a></li> <li><a href="/wiki/Vedlej%C5%A1%C3%AD_%C3%BA%C4%8Dinek_(programov%C3%A1n%C3%AD)" title="Vedlejší účinek (programování)">Vedlejší účinek (programování)</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Externí_odkazy"><span id="Extern.C3.AD_odkazy"></span>Externí odkazy</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&veaction=edit&section=15" title="Editace sekce: Externí odkazy" class="mw-editsection-visualeditor"><span>editovat</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&action=edit&section=15" title="Editovat zdrojový kód sekce Externí odkazy"><span>editovat zdroj</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><span class="wd"><span class="sisterproject sisterproject-commons"><span class="sisterproject_image"><span typeof="mw:File"><a href="/wiki/Wikimedia_Commons" title="Wikimedia Commons"><img alt="Logo Wikimedia Commons" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/12px-Commons-logo.svg.png" decoding="async" width="12" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/18px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/24px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376" /></a></span></span> <span class="sisterproject_text">Obrázky, zvuky či videa k tématu <span class="sisterproject_text_target"><a href="https://commons.wikimedia.org/wiki/Category:Functional_programming" class="extiw" title="c:Category:Functional programming">funkcionální programování</a></span> na <a href="/wiki/Wikimedia_Commons" title="Wikimedia Commons">Wikimedia Commons</a></span></span></span><i> </i></li></ul> <style data-mw-deduplicate="TemplateStyles:r23078045">.mw-parser-output .navbox2{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 .navbox2 .navbox2{margin-top:0}.mw-parser-output .navbox2+.navbox2{margin-top:-1px}.mw-parser-output .navbox2-inner,.mw-parser-output .navbox2-subgroup{width:100%}.mw-parser-output .navbox2-group,.mw-parser-output .navbox2-title,.mw-parser-output .navbox2-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output th.navbox2-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox2,.mw-parser-output .navbox2-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox2-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output tr+tr>.navbox2-abovebelow,.mw-parser-output tr+tr>.navbox2-group,.mw-parser-output tr+tr>.navbox2-image,.mw-parser-output tr+tr>.navbox2-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox2 th,.mw-parser-output .navbox2-title{background-color:#e0e0e0}.mw-parser-output .navbox2-abovebelow,.mw-parser-output th.navbox2-group,.mw-parser-output .navbox2-subgroup .navbox2-title{background-color:#e7e7e7}.mw-parser-output .navbox2-subgroup .navbox2-title{font-size:88%}.mw-parser-output .navbox2-subgroup .navbox2-group,.mw-parser-output .navbox2-subgroup .navbox2-abovebelow{background-color:#f0f0f0}.mw-parser-output .navbox2-even{background-color:#f7f7f7}.mw-parser-output .navbox2-odd{background-color:transparent}.mw-parser-output .navbox2 .hlist td dl,.mw-parser-output .navbox2 .hlist td ol,.mw-parser-output .navbox2 .hlist td ul,.mw-parser-output .navbox2 td.hlist dl,.mw-parser-output .navbox2 td.hlist ol,.mw-parser-output .navbox2 td.hlist ul{padding:0.125em 0}</style><div role="navigation" class="navbox2" aria-labelledby="Autoritní_data_frameless_&#124;text-top_&#124;10px_&#124;alt=Editovat_na_Wikidatech_&#124;link=https&#58;//www.wikidata.org/wiki/Q193076#identifiers&#124;Editovat_na_Wikidatech" style="padding:2px"><table class="nowraplinks hlist navbox2-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th id="Autoritní_data_frameless_&#124;text-top_&#124;10px_&#124;alt=Editovat_na_Wikidatech_&#124;link=https&#58;//www.wikidata.org/wiki/Q193076#identifiers&#124;Editovat_na_Wikidatech" scope="row" class="navbox2-group" style="width:1%"><a href="/wiki/Autoritn%C3%AD_kontrola" title="Autoritní kontrola">Autoritní data</a> <span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q193076#identifiers" title="Editovat na Wikidatech"><img alt="Editovat na Wikidatech" src="//upload.wikimedia.org/wikipedia/commons/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/commons/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/commons/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="navbox2-list navbox2-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><span class="nowrap"><a href="/wiki/N%C3%A1rodn%C3%AD_knihovna_%C4%8Cesk%C3%A9_republiky" title="Národní knihovna České republiky">NKC</a>: <span class="uid"><a rel="nofollow" class="external text" href="https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=ph572639">ph572639</a></span></span></li> <li><span class="nowrap"><a href="/wiki/Polytematick%C3%BD_strukturovan%C3%BD_hesl%C3%A1%C5%99" title="Polytematický strukturovaný heslář">PSH</a>: <span class="uid"><a rel="nofollow" class="external text" href="https://psh.techlib.cz/skos/PSH6639">6639</a></span></span></li> <li><span class="nowrap"><a href="/wiki/N%C3%A1rodn%C3%AD_knihovna_%C5%A0pan%C4%9Blska" title="Národní knihovna Španělska">BNE</a>: <span class="uid"><a rel="nofollow" class="external text" href="http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=XX547935">XX547935</a></span></span></li> <li><span class="nowrap"><a href="/wiki/Francouzsk%C3%A1_n%C3%A1rodn%C3%AD_knihovna" title="Francouzská národní knihovna">BNF</a>: <span class="uid"><a rel="nofollow" class="external text" href="https://catalogue.bnf.fr/ark:/12148/cb121910539">cb121910539</a> <a rel="nofollow" class="external text" href="https://data.bnf.fr/ark:/12148/cb121910539">(data)</a></span></span></li> <li><span class="nowrap"><a href="/wiki/Gemeinsame_Normdatei" title="Gemeinsame Normdatei">GND</a>: <span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4198740-8">4198740-8</a></span></span></li> <li><span class="nowrap"><a href="/wiki/Library_of_Congress_Control_Number" title="Library of Congress Control Number">LCCN</a>: <span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/subjects/sh87007844">sh87007844</a></span></span></li> <li><span class="nowrap"><a href="/wiki/N%C3%A1rodn%C3%AD_knihovna_Izraele" title="Národní knihovna Izraele">NLI</a>: <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">987007541542105171</a></span></span></li></ul> </div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐api‐int.codfw.main‐fdccb95f‐9582h Cached time: 20241127220805 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] CPU time usage: 0.220 seconds Real time usage: 0.419 seconds Preprocessor visited node count: 1075/1000000 Post‐expand include size: 32042/2097152 bytes Template argument size: 5203/2097152 bytes Highest expansion depth: 16/100 Expensive parser function count: 10/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 19195/5000000 bytes Lua time usage: 0.073/10.000 seconds Lua memory usage: 1814296/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 255.582 1 -total 36.53% 93.356 1 Šablona:Commonscat 24.90% 63.651 1 Šablona:Programovací_paradigmata 24.10% 61.597 1 Šablona:Soubox 22.00% 56.232 1 Šablona:Autoritní_data 14.81% 37.842 11 Šablona:Vseznam 6.98% 17.827 1 Šablona:Citace_elektronického_periodika 3.86% 9.854 1 Šablona:Upravit 3.04% 7.763 1 Šablona:Cedule 2.80% 7.155 1 Šablona:Navbar --> <!-- Saved in parser cache with key cswiki:pcache:idhash:22943-0!canonical and timestamp 20241127220805 and revision id 23700281. Rendering was triggered because: api-parse --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1&useformat=desktop" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Citováno z „<a dir="ltr" href="https://cs.wikipedia.org/w/index.php?title=Funkcionální_programování&oldid=23700281">https://cs.wikipedia.org/w/index.php?title=Funkcionální_programování&oldid=23700281</a>“</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/N%C3%A1pov%C4%9Bda:Kategorie" title="Nápověda:Kategorie">Kategorie</a>: <ul><li><a href="/wiki/Kategorie:Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD" title="Kategorie:Funkcionální programování">Funkcionální programování</a></li><li><a href="/wiki/Kategorie:Paradigmata_programov%C3%A1n%C3%AD" title="Kategorie:Paradigmata programování">Paradigmata programování</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Skryté kategorie: <ul><li><a href="/wiki/Kategorie:%C3%9Adr%C5%BEba:%C4%8Cl%C3%A1nky_k_%C3%BAprav%C4%9B" title="Kategorie:Údržba:Články k úpravě">Údržba:Články k úpravě</a></li><li><a href="/wiki/Kategorie:%C3%9Adr%C5%BEba:%C4%8Cl%C3%A1nky_s_vyh%C3%BDbav%C3%BDmi_slovy" title="Kategorie:Údržba:Články s vyhýbavými slovy">Údržba:Články s vyhýbavými slovy</a></li><li><a href="/wiki/Kategorie:Monitoring:%C4%8Cl%C3%A1nky_s_identifik%C3%A1torem_NKC" title="Kategorie:Monitoring:Články s identifikátorem NKC">Monitoring:Články s identifikátorem NKC</a></li><li><a href="/wiki/Kategorie:Monitoring:%C4%8Cl%C3%A1nky_s_identifik%C3%A1torem_PSH" title="Kategorie:Monitoring:Články s identifikátorem PSH">Monitoring:Články s identifikátorem PSH</a></li><li><a href="/wiki/Kategorie:Monitoring:%C4%8Cl%C3%A1nky_s_identifik%C3%A1torem_BNE" title="Kategorie:Monitoring:Články s identifikátorem BNE">Monitoring:Články s identifikátorem BNE</a></li><li><a href="/wiki/Kategorie:Monitoring:%C4%8Cl%C3%A1nky_s_identifik%C3%A1torem_BNF" title="Kategorie:Monitoring:Články s identifikátorem BNF">Monitoring:Články s identifikátorem BNF</a></li><li><a href="/wiki/Kategorie:Monitoring:%C4%8Cl%C3%A1nky_s_identifik%C3%A1torem_GND" title="Kategorie:Monitoring:Články s identifikátorem GND">Monitoring:Články s identifikátorem GND</a></li><li><a href="/wiki/Kategorie:Monitoring:%C4%8Cl%C3%A1nky_s_identifik%C3%A1torem_LCCN" title="Kategorie:Monitoring:Články s identifikátorem LCCN">Monitoring:Články s identifikátorem LCCN</a></li><li><a href="/wiki/Kategorie:Monitoring:%C4%8Cl%C3%A1nky_s_identifik%C3%A1torem_NLI" title="Kategorie:Monitoring:Články s identifikátorem NLI">Monitoring:Články s identifikátorem NLI</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"> Stránka byla naposledy editována 28. 2. 2024 v 17:19.</li> <li id="footer-info-copyright">Text je dostupný pod <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.cs">licencí Creative Commons Uveďte původ – Zachovejte licenci</a>, případně za dalších podmínek. Podrobnosti naleznete na stránce <a class="external text" href="https://foundation.wikimedia.org/wiki/Policy:Terms_of_Use/cs">Podmínky užití</a>.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Ochrana osobních údajů</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedie">O Wikipedii</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedie:Vylou%C4%8Den%C3%AD_odpov%C4%9Bdnosti">Vyloučení odpovědnosti</a></li> <li id="footer-places-contact"><a href="//cs.wikipedia.org/wiki/Wikipedie:Kontakt">Kontaktujte Wikipedii</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Kodex chování</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Vývojáři</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/cs.wikipedia.org">Statistiky</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Prohlášení o cookies</a></li> <li id="footer-places-mobileview"><a href="//cs.m.wikipedia.org/w/index.php?title=Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobilní verze</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.canary-796c67b754-8mmx5","wgBackendResponseTime":171,"wgPageParseReport":{"limitreport":{"cputime":"0.220","walltime":"0.419","ppvisitednodes":{"value":1075,"limit":1000000},"postexpandincludesize":{"value":32042,"limit":2097152},"templateargumentsize":{"value":5203,"limit":2097152},"expansiondepth":{"value":16,"limit":100},"expensivefunctioncount":{"value":10,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":19195,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 255.582 1 -total"," 36.53% 93.356 1 Šablona:Commonscat"," 24.90% 63.651 1 Šablona:Programovací_paradigmata"," 24.10% 61.597 1 Šablona:Soubox"," 22.00% 56.232 1 Šablona:Autoritní_data"," 14.81% 37.842 11 Šablona:Vseznam"," 6.98% 17.827 1 Šablona:Citace_elektronického_periodika"," 3.86% 9.854 1 Šablona:Upravit"," 3.04% 7.763 1 Šablona:Cedule"," 2.80% 7.155 1 Šablona:Navbar"]},"scribunto":{"limitreport-timeusage":{"value":"0.073","limit":"10.000"},"limitreport-memusage":{"value":1814296,"limit":52428800}},"cachereport":{"origin":"mw-api-int.codfw.main-fdccb95f-9582h","timestamp":"20241127220805","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Funkcion\u00e1ln\u00ed programov\u00e1n\u00ed","url":"https:\/\/cs.wikipedia.org\/wiki\/Funkcion%C3%A1ln%C3%AD_programov%C3%A1n%C3%AD","sameAs":"http:\/\/www.wikidata.org\/entity\/Q193076","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q193076","author":{"@type":"Organization","name":"P\u0159isp\u011bvatel\u00e9 projekt\u016f Wikimedia"},"publisher":{"@type":"Organization","name":"nadace Wikimedia","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2005-06-16T18:28:08Z","dateModified":"2024-02-28T16:19:52Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/b\/b1\/Haskell-Logo.jpg"}</script> </body> </html>