CINXE.COM
Prolog – Wikipédia, a enciclopédia livre
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="pt" dir="ltr"> <head> <meta charset="UTF-8"> <title>Prolog – Wikipédia, a enciclopédia livre</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )ptwikimwclientpreferences=([^;]+)/);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":"dmy","wgMonthNames":["","janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"wgRequestId":"7ba60038-1de4-4c3f-aa64-6f0856329737","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Prolog","wgTitle":"Prolog","wgCurRevisionId":67164555,"wgRevisionId":67164555,"wgArticleId":49099,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["!CS1 manut: Nomes múltiplos: lista de autores","!Artigos que carecem de notas de rodapé desde novembro de 2012","!Artigos que carecem de notas de rodapé sem indicação de tema","!Artigos destacados na Wikipédia em neerlandês","Linguagens de programação declarativas","Lógica","Inteligência artificial","Linguagens de programação lógicas"],"wgPageViewLanguage":"pt","wgPageContentLanguage":"pt","wgPageContentModel":"wikitext","wgRelevantPageName":"Prolog", "wgRelevantArticleId":49099,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"pt","pageLanguageDir":"ltr","pageVariantFallbacks":"pt"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":30000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q163468","wgCheckUserClientHintsHeadersJsApi":["architecture","bitness","brands","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics": true,"wgGETopicsMatchModeEnabled":true,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false,"wgSiteNoticeId":"2.30"};RLSTATE={"ext.gadget.FeedbackHighlight-base":"ready","ext.gadget.keepPDU":"ready","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","ext.math.styles":"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","ext.dismissableSiteNotice.styles":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp", "ext.gadget.Topicon","ext.gadget.Metacaixa","ext.gadget.TitleRewrite","ext.gadget.ElementosOcultaveis","ext.gadget.FeedbackHighlight","ext.gadget.ReferenceTooltips","ext.gadget.NewVillagePump","ext.gadget.wikibugs","ext.gadget.charinsert","ext.gadget.requestForAdminship","ext.gadget.WikiMiniAtlas","ext.gadget.PagesForDeletion","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","oojs-ui.styles.icons-media","oojs-ui-core.icons","wikibase.sidebar.tracking","ext.dismissableSiteNotice"];</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=pt&modules=ext.cite.styles%7Cext.dismissableSiteNotice.styles%7Cext.math.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=pt&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=pt&modules=ext.gadget.FeedbackHighlight-base%2CkeepPDU&only=styles&skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=pt&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.3"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Prolog – Wikipédia, a enciclopédia livre"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//pt.m.wikipedia.org/wiki/Prolog"> <link rel="alternate" type="application/x-wiki" title="Editar" href="/w/index.php?title=Prolog&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="Wikipédia (pt)"> <link rel="EditURI" type="application/rsd+xml" href="//pt.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://pt.wikipedia.org/wiki/Prolog"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.pt"> <link rel="alternate" type="application/atom+xml" title="''Feed'' Atom Wikipédia" href="/w/index.php?title=Especial:Mudan%C3%A7as_recentes&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-Prolog rootpage-Prolog skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Saltar para o conteúdo</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="''Site''"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Menu principal" > <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">Menu principal</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">Menu principal</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">mover para a barra lateral</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">ocultar</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navegação </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Wikip%C3%A9dia:P%C3%A1gina_principal" title="Visitar a página principal [z]" accesskey="z"><span>Página principal</span></a></li><li id="n-featuredcontent" class="mw-list-item"><a href="/wiki/Portal:Conte%C3%BAdo_destacado"><span>Conteúdo destacado</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Eventos_atuais" title="Informação temática sobre eventos atuais"><span>Eventos atuais</span></a></li><li id="n-villagepump" class="mw-list-item"><a href="/wiki/Wikip%C3%A9dia:Esplanada"><span>Esplanada</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Especial:Aleat%C3%B3ria" title="Carregar página aleatória [x]" accesskey="x"><span>Página aleatória</span></a></li><li id="n-portals" class="mw-list-item"><a href="/wiki/Portal:%C3%8Dndice"><span>Portais</span></a></li><li id="n-bug_in_article" class="mw-list-item"><a href="/wiki/Wikip%C3%A9dia:Informe_um_erro"><span>Informar um erro</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Colaboração </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-welcome" class="mw-list-item"><a href="/wiki/Wikip%C3%A9dia:Boas-vindas"><span>Boas-vindas</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/Ajuda:P%C3%A1gina_principal" title="Um local reservado para auxílio."><span>Ajuda</span></a></li><li id="n-Páginas-de-testes-públicas" class="mw-list-item"><a href="/wiki/Ajuda:P%C3%A1gina_de_testes"><span>Páginas de testes públicas</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikip%C3%A9dia:Portal_comunit%C3%A1rio" title="Sobre o projeto"><span>Portal comunitário</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Especial:Mudan%C3%A7as_recentes" title="Uma lista de mudanças recentes nesta wiki [r]" accesskey="r"><span>Mudanças recentes</span></a></li><li id="n-maintenance" class="mw-list-item"><a href="/wiki/Wikip%C3%A9dia:Manuten%C3%A7%C3%A3o"><span>Manutenção</span></a></li><li id="n-createpage" class="mw-list-item"><a href="/wiki/Ajuda:Guia_de_edi%C3%A7%C3%A3o/Como_come%C3%A7ar_uma_p%C3%A1gina"><span>Criar página</span></a></li><li id="n-newpages-description" class="mw-list-item"><a href="/wiki/Especial:P%C3%A1ginas_novas"><span>Páginas novas</span></a></li><li id="n-contact-description" class="mw-list-item"><a href="/wiki/Wikip%C3%A9dia:Contato"><span>Contato</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Wikip%C3%A9dia:P%C3%A1gina_principal" 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="Wikipédia" src="/static/images/mobile/copyright/wikipedia-wordmark-fr.svg" style="width: 7.4375em; height: 1.125em;"> <img class="mw-logo-tagline" alt="" src="/static/images/mobile/copyright/wikipedia-tagline-pt.svg" width="120" height="13" style="width: 7.5em; 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/Especial:Pesquisar" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Pesquisar na Wikipédia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Busca</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="Pesquisar na Wikipédia" aria-label="Pesquisar na Wikipédia" autocapitalize="sentences" title="Pesquisar na Wikipédia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Especial:Pesquisar"> </div> <button class="cdx-button cdx-search-input__end-button">Pesquisar</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Ferramentas pessoais"> <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="Aspeto"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Aspeto" > <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">Aspeto</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=20120521SB001&uselang=pt" class=""><span>Donativos</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=Especial:Criar_conta&returnto=Prolog" title="É encorajado a criar uma conta e iniciar sessão; no entanto, não é obrigatório" class=""><span>Criar uma conta</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=Especial:Entrar&returnto=Prolog" title="Aconselhamos-lhe a criar uma conta na Wikipédia, embora tal não seja obrigatório. [o]" accesskey="o" class=""><span>Entrar</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="Mais opções" > <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="Ferramentas pessoais" > <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">Ferramentas pessoais</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Menu do utilizador" > <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=20120521SB001&uselang=pt"><span>Donativos</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Especial:Criar_conta&returnto=Prolog" title="É encorajado a criar uma conta e iniciar sessão; no entanto, não é obrigatório"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Criar uma conta</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Especial:Entrar&returnto=Prolog" title="Aconselhamos-lhe a criar uma conta na Wikipédia, embora tal não seja obrigatório. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Entrar</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"> Páginas para editores sem sessão iniciada <a href="/wiki/Ajuda:Introduction" aria-label="Saiba mais sobre edição"><span>saber mais</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/Especial:Minhas_contribui%C3%A7%C3%B5es" title="Uma lista de edições feitas a partir deste endereço IP [y]" accesskey="y"><span>Contribuições</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Especial:Minha_discuss%C3%A3o" title="Discussão sobre edições feitas a partir deste endereço IP [n]" accesskey="n"><span>Discussão</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"><div id="mw-dismissablenotice-anonplace"></div><script>(function(){var node=document.getElementById("mw-dismissablenotice-anonplace");if(node){node.outerHTML="\u003Cdiv class=\"mw-dismissable-notice\"\u003E\u003Cdiv class=\"mw-dismissable-notice-close\"\u003E[\u003Ca tabindex=\"0\" role=\"button\"\u003Eocultar\u003C/a\u003E]\u003C/div\u003E\u003Cdiv class=\"mw-dismissable-notice-body\"\u003E\u003C!-- CentralNotice --\u003E\u003Cdiv id=\"localNotice\" data-nosnippet=\"\"\u003E\u003Cdiv class=\"anonnotice\" lang=\"pt\" dir=\"ltr\"\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E";}}());</script></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="''Site''"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Conteúdo" 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">Conteúdo</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">mover para a barra lateral</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">ocultar</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">Início</div> </a> </li> <li id="toc-História" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#História"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>História</span> </div> </a> <ul id="toc-História-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Características" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Características"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Características</span> </div> </a> <ul id="toc-Características-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Tipos_de_dados" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Tipos_de_dados"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Tipos de dados</span> </div> </a> <button aria-controls="toc-Tipos_de_dados-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>Alternar a subsecção Tipos de dados</span> </button> <ul id="toc-Tipos_de_dados-sublist" class="vector-toc-list"> <li id="toc-Escopo_dos_identificadores" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Escopo_dos_identificadores"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Escopo dos identificadores</span> </div> </a> <ul id="toc-Escopo_dos_identificadores-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Átomos" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Átomos"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Átomos</span> </div> </a> <ul id="toc-Átomos-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Números" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Números"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>Números</span> </div> </a> <ul id="toc-Números-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Variáveis" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Variáveis"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.4</span> <span>Variáveis</span> </div> </a> <ul id="toc-Variáveis-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Termos_compostos" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Termos_compostos"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.5</span> <span>Termos compostos</span> </div> </a> <ul id="toc-Termos_compostos-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Listas" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Listas"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.6</span> <span>Listas</span> </div> </a> <ul id="toc-Listas-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Strings" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Strings"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.7</span> <span>Strings</span> </div> </a> <ul id="toc-Strings-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Fatos" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Fatos"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Fatos</span> </div> </a> <ul id="toc-Fatos-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Regras" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Regras"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Regras</span> </div> </a> <button aria-controls="toc-Regras-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>Alternar a subsecção Regras</span> </button> <ul id="toc-Regras-sublist" class="vector-toc-list"> <li id="toc-Regras_Recursivas" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Regras_Recursivas"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1</span> <span>Regras Recursivas</span> </div> </a> <ul id="toc-Regras_Recursivas-sublist" class="vector-toc-list"> <li id="toc-Recursão_em_cauda" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Recursão_em_cauda"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1.1</span> <span>Recursão em cauda</span> </div> </a> <ul id="toc-Recursão_em_cauda-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Recursão_não_em_cauda" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Recursão_não_em_cauda"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1.2</span> <span>Recursão não em cauda</span> </div> </a> <ul id="toc-Recursão_não_em_cauda-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> </ul> </li> <li id="toc-Avaliação" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Avaliação"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Avaliação</span> </div> </a> <button aria-controls="toc-Avaliação-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>Alternar a subsecção Avaliação</span> </button> <ul id="toc-Avaliação-sublist" class="vector-toc-list"> <li id="toc-Negação" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Negação"> <div class="vector-toc-text"> <span class="vector-toc-numb">6.1</span> <span>Negação</span> </div> </a> <ul id="toc-Negação-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Operadores_de_Controle" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Operadores_de_Controle"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Operadores de Controle</span> </div> </a> <button aria-controls="toc-Operadores_de_Controle-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>Alternar a subsecção Operadores de Controle</span> </button> <ul id="toc-Operadores_de_Controle-sublist" class="vector-toc-list"> <li id="toc-Backtracking" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Backtracking"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.1</span> <span>Backtracking</span> </div> </a> <ul id="toc-Backtracking-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Comando_Cut" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Comando_Cut"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.2</span> <span>Comando <i>Cut</i></span> </div> </a> <ul id="toc-Comando_Cut-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Comando_Fail" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Comando_Fail"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.3</span> <span>Comando <i>Fail</i></span> </div> </a> <ul id="toc-Comando_Fail-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Execução" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Execução"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>Execução</span> </div> </a> <ul id="toc-Execução-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-DCGs_e_parsing" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#DCGs_e_parsing"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>DCGs e parsing</span> </div> </a> <ul id="toc-DCGs_e_parsing-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Exemplos_de_código" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Exemplos_de_código"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>Exemplos de código</span> </div> </a> <button aria-controls="toc-Exemplos_de_código-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>Alternar a subsecção Exemplos de código</span> </button> <ul id="toc-Exemplos_de_código-sublist" class="vector-toc-list"> <li id="toc-Hello_World" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Hello_World"> <div class="vector-toc-text"> <span class="vector-toc-numb">10.1</span> <span>Hello World</span> </div> </a> <ul id="toc-Hello_World-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Quicksort" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Quicksort"> <div class="vector-toc-text"> <span class="vector-toc-numb">10.2</span> <span>Quicksort</span> </div> </a> <ul id="toc-Quicksort-sublist" class="vector-toc-list"> <li id="toc-Torres_de_Hanoi" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Torres_de_Hanoi"> <div class="vector-toc-text"> <span class="vector-toc-numb">10.2.1</span> <span>Torres de Hanoi</span> </div> </a> <ul id="toc-Torres_de_Hanoi-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Mergesort" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Mergesort"> <div class="vector-toc-text"> <span class="vector-toc-numb">10.3</span> <span>Mergesort</span> </div> </a> <ul id="toc-Mergesort-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Implementações" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Implementações"> <div class="vector-toc-text"> <span class="vector-toc-numb">10.4</span> <span>Implementações</span> </div> </a> <ul id="toc-Implementações-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Extensões" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Extensões"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>Extensões</span> </div> </a> <ul id="toc-Extensões-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Referências" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Referências"> <div class="vector-toc-text"> <span class="vector-toc-numb">12</span> <span>Referências</span> </div> </a> <ul id="toc-Referências-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Referências_2" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Referências_2"> <div class="vector-toc-text"> <span class="vector-toc-numb">13</span> <span>Referências</span> </div> </a> <ul id="toc-Referências_2-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Ligações_externas" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Ligações_externas"> <div class="vector-toc-text"> <span class="vector-toc-numb">14</span> <span>Ligações externas</span> </div> </a> <ul id="toc-Ligações_externas-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="Conteúdo" 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="Alternar o índice" > <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">Alternar o índice</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">Prolog</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="Ir para um artigo noutra língua. Disponível em 58 línguas" > <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-58" 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">58 línguas</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-an mw-list-item"><a href="https://an.wikipedia.org/wiki/Prolog" title="Prolog — aragonês" lang="an" hreflang="an" data-title="Prolog" data-language-autonym="Aragonés" data-language-local-name="aragonês" class="interlanguage-link-target"><span>Aragonés</span></a></li><li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%A8%D8%B1%D9%88%D9%84%D9%88%D8%BA" title="برولوغ — árabe" lang="ar" hreflang="ar" data-title="برولوغ" data-language-autonym="العربية" data-language-local-name="árabe" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-ast mw-list-item"><a href="https://ast.wikipedia.org/wiki/Prolog" title="Prolog — asturiano" lang="ast" hreflang="ast" data-title="Prolog" data-language-autonym="Asturianu" data-language-local-name="asturiano" class="interlanguage-link-target"><span>Asturianu</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Proloq_dili" title="Proloq dili — azerbaijano" lang="az" hreflang="az" data-title="Proloq dili" data-language-autonym="Azərbaycanca" data-language-local-name="azerbaijano" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-bat-smg mw-list-item"><a href="https://bat-smg.wikipedia.org/wiki/Prolog" title="Prolog — Samogitian" lang="sgs" hreflang="sgs" data-title="Prolog" data-language-autonym="Žemaitėška" data-language-local-name="Samogitian" class="interlanguage-link-target"><span>Žemaitėška</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%BB%D0%BE%D0%B3_(%D0%BC%D0%BE%D0%B2%D0%B0_%D0%BF%D1%80%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%B0%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F)" title="Пралог (мова праграмавання) — bielorrusso" lang="be" hreflang="be" data-title="Пралог (мова праграмавання)" data-language-autonym="Беларуская" data-language-local-name="bielorrusso" 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%9F%D1%80%D0%BE%D0%BB%D0%BE%D0%B3_(%D0%B5%D0%B7%D0%B8%D0%BA_%D0%B7%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D0%BD%D0%B5)" title="Пролог (език за програмиране) — búlgaro" lang="bg" hreflang="bg" data-title="Пролог (език за програмиране)" data-language-autonym="Български" data-language-local-name="búlgaro" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Prolog" title="Prolog — catalão" lang="ca" hreflang="ca" data-title="Prolog" data-language-autonym="Català" data-language-local-name="catalão" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Prolog_(programovac%C3%AD_jazyk)" title="Prolog (programovací jazyk) — checo" lang="cs" hreflang="cs" data-title="Prolog (programovací jazyk)" data-language-autonym="Čeština" data-language-local-name="checo" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Prolog_(programmeringssprog)" title="Prolog (programmeringssprog) — dinamarquês" lang="da" hreflang="da" data-title="Prolog (programmeringssprog)" data-language-autonym="Dansk" data-language-local-name="dinamarquês" 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/Prolog_(Programmiersprache)" title="Prolog (Programmiersprache) — alemão" lang="de" hreflang="de" data-title="Prolog (Programmiersprache)" data-language-autonym="Deutsch" data-language-local-name="alemão" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/Prolog" title="Prolog — grego" lang="el" hreflang="el" data-title="Prolog" data-language-autonym="Ελληνικά" data-language-local-name="grego" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Prolog" title="Prolog — inglês" lang="en" hreflang="en" data-title="Prolog" data-language-autonym="English" data-language-local-name="inglês" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikipedia.org/wiki/Prologo_(programlingvo)" title="Prologo (programlingvo) — esperanto" lang="eo" hreflang="eo" data-title="Prologo (programlingvo)" data-language-autonym="Esperanto" data-language-local-name="esperanto" class="interlanguage-link-target"><span>Esperanto</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Prolog" title="Prolog — espanhol" lang="es" hreflang="es" data-title="Prolog" data-language-autonym="Español" data-language-local-name="espanhol" 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/Prolog" title="Prolog — estónio" lang="et" hreflang="et" data-title="Prolog" data-language-autonym="Eesti" data-language-local-name="estónio" 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/Prolog" title="Prolog — basco" lang="eu" hreflang="eu" data-title="Prolog" data-language-autonym="Euskara" data-language-local-name="basco" 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/%D9%BE%D8%B1%D9%88%D9%84%D9%88%DA%AF" title="پرولوگ — persa" lang="fa" hreflang="fa" data-title="پرولوگ" data-language-autonym="فارسی" data-language-local-name="persa" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/Prolog" title="Prolog — finlandês" lang="fi" hreflang="fi" data-title="Prolog" data-language-autonym="Suomi" data-language-local-name="finlandês" 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/Prolog" title="Prolog — francês" lang="fr" hreflang="fr" data-title="Prolog" data-language-autonym="Français" data-language-local-name="francês" 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/Prolog" title="Prolog — irlandês" lang="ga" hreflang="ga" data-title="Prolog" data-language-autonym="Gaeilge" data-language-local-name="irlandês" 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/Prolog" title="Prolog — galego" lang="gl" hreflang="gl" data-title="Prolog" data-language-autonym="Galego" data-language-local-name="galego" class="interlanguage-link-target"><span>Galego</span></a></li><li class="interlanguage-link interwiki-hak mw-list-item"><a href="https://hak.wikipedia.org/wiki/Prolog" title="Prolog — hacá" lang="hak" hreflang="hak" data-title="Prolog" data-language-autonym="客家語 / Hak-kâ-ngî" data-language-local-name="hacá" class="interlanguage-link-target"><span>客家語 / Hak-kâ-ngî</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/%D7%A4%D7%A8%D7%95%D7%9C%D7%95%D7%92_(%D7%A9%D7%A4%D7%AA_%D7%AA%D7%9B%D7%A0%D7%95%D7%AA)" title="פרולוג (שפת תכנות) — hebraico" lang="he" hreflang="he" data-title="פרולוג (שפת תכנות)" data-language-autonym="עברית" data-language-local-name="hebraico" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Prolog" title="Prolog — húngaro" lang="hu" hreflang="hu" data-title="Prolog" data-language-autonym="Magyar" data-language-local-name="húngaro" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Prolog" title="Prolog — indonésio" lang="id" hreflang="id" data-title="Prolog" data-language-autonym="Bahasa Indonesia" data-language-local-name="indonésio" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-io mw-list-item"><a href="https://io.wikipedia.org/wiki/Prolog" title="Prolog — ido" lang="io" hreflang="io" data-title="Prolog" data-language-autonym="Ido" data-language-local-name="ido" class="interlanguage-link-target"><span>Ido</span></a></li><li class="interlanguage-link interwiki-is mw-list-item"><a href="https://is.wikipedia.org/wiki/Prolog" title="Prolog — islandês" lang="is" hreflang="is" data-title="Prolog" data-language-autonym="Íslenska" data-language-local-name="islandês" class="interlanguage-link-target"><span>Íslenska</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Prolog" title="Prolog — italiano" lang="it" hreflang="it" data-title="Prolog" data-language-autonym="Italiano" data-language-local-name="italiano" 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/Prolog" title="Prolog — japonês" lang="ja" hreflang="ja" data-title="Prolog" data-language-autonym="日本語" data-language-local-name="japonês" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-jbo mw-list-item"><a href="https://jbo.wikipedia.org/wiki/prolog" title="prolog — lojban" lang="jbo" hreflang="jbo" data-title="prolog" data-language-autonym="La .lojban." data-language-local-name="lojban" class="interlanguage-link-target"><span>La .lojban.</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%A4%EB%A1%9C%EA%B7%B8_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)" title="프롤로그 (프로그래밍 언어) — coreano" lang="ko" hreflang="ko" data-title="프롤로그 (프로그래밍 언어)" data-language-autonym="한국어" data-language-local-name="coreano" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/Prolog" title="Prolog — letão" lang="lv" hreflang="lv" data-title="Prolog" data-language-autonym="Latviešu" data-language-local-name="letão" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-mk mw-list-item"><a href="https://mk.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%BB%D0%BE%D0%B3_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%81%D0%BA%D0%B8_%D1%98%D0%B0%D0%B7%D0%B8%D0%BA)" title="Пролог (програмски јазик) — macedónio" lang="mk" hreflang="mk" data-title="Пролог (програмски јазик)" data-language-autonym="Македонски" data-language-local-name="macedónio" class="interlanguage-link-target"><span>Македонски</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Prolog" title="Prolog — malaio" lang="ms" hreflang="ms" data-title="Prolog" data-language-autonym="Bahasa Melayu" data-language-local-name="malaio" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-nl badge-Q17437796 badge-featuredarticle mw-list-item" title="artigo destacado"><a href="https://nl.wikipedia.org/wiki/Prolog" title="Prolog — neerlandês" lang="nl" hreflang="nl" data-title="Prolog" data-language-autonym="Nederlands" data-language-local-name="neerlandês" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-nn mw-list-item"><a href="https://nn.wikipedia.org/wiki/Programmeringsspr%C3%A5ket_Prolog" title="Programmeringsspråket Prolog — norueguês nynorsk" lang="nn" hreflang="nn" data-title="Programmeringsspråket Prolog" data-language-autonym="Norsk nynorsk" data-language-local-name="norueguês nynorsk" class="interlanguage-link-target"><span>Norsk nynorsk</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Prolog_(programmeringsspr%C3%A5k)" title="Prolog (programmeringsspråk) — norueguês bokmål" lang="nb" hreflang="nb" data-title="Prolog (programmeringsspråk)" data-language-autonym="Norsk bokmål" data-language-local-name="norueguês bokmål" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-pdc mw-list-item"><a href="https://pdc.wikipedia.org/wiki/Prolog" title="Prolog — Pennsylvania German" lang="pdc" hreflang="pdc" data-title="Prolog" data-language-autonym="Deitsch" data-language-local-name="Pennsylvania German" class="interlanguage-link-target"><span>Deitsch</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Prolog_(j%C4%99zyk_programowania)" title="Prolog (język programowania) — polaco" lang="pl" hreflang="pl" data-title="Prolog (język programowania)" data-language-autonym="Polski" data-language-local-name="polaco" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/Prolog_(limbaj_de_programare)" title="Prolog (limbaj de programare) — romeno" lang="ro" hreflang="ro" data-title="Prolog (limbaj de programare)" data-language-autonym="Română" data-language-local-name="romeno" 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%9F%D1%80%D0%BE%D0%BB%D0%BE%D0%B3_(%D1%8F%D0%B7%D1%8B%D0%BA_%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%D1%8F)" title="Пролог (язык программирования) — russo" lang="ru" hreflang="ru" data-title="Пролог (язык программирования)" data-language-autonym="Русский" data-language-local-name="russo" 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%9F%D1%80%D0%BE%D0%BB%D0%BE%D2%91_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D2%91%D1%80%D0%B0%D0%BC%D0%BE%D0%B2%D0%B0%D0%BD%D1%8F)" title="Пролоґ (язык проґрамованя) — Rusyn" lang="rue" hreflang="rue" data-title="Пролоґ (язык проґрамованя)" data-language-autonym="Русиньскый" data-language-local-name="Rusyn" class="interlanguage-link-target"><span>Русиньскый</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Prolog" title="Prolog — Simple English" lang="en-simple" hreflang="en-simple" data-title="Prolog" 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/Prolog" title="Prolog — eslovaco" lang="sk" hreflang="sk" data-title="Prolog" data-language-autonym="Slovenčina" data-language-local-name="eslovaco" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Prolog_(programski_jezik)" title="Prolog (programski jezik) — esloveno" lang="sl" hreflang="sl" data-title="Prolog (programski jezik)" data-language-autonym="Slovenščina" data-language-local-name="esloveno" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/Prolog_(programski_jezik)" title="Prolog (programski jezik) — sérvio" lang="sr" hreflang="sr" data-title="Prolog (programski jezik)" data-language-autonym="Српски / srpski" data-language-local-name="sérvio" 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/Prolog_(programspr%C3%A5k)" title="Prolog (programspråk) — sueco" lang="sv" hreflang="sv" data-title="Prolog (programspråk)" data-language-autonym="Svenska" data-language-local-name="sueco" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/%E0%AE%AA%E0%AF%81%E0%AE%B0%E0%AF%8A%E0%AE%B2%E0%AE%BE%E0%AE%95%E0%AF%8D" title="புரொலாக் — tâmil" lang="ta" hreflang="ta" data-title="புரொலாக்" data-language-autonym="தமிழ்" data-language-local-name="tâmil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%BB%D0%BE%D0%B3_(%D0%B7%D0%B0%D0%B1%D0%BE%D0%BD%D0%B8_%D0%B1%D0%B0%D1%80%D0%BD%D0%BE%D0%BC%D0%B0%D0%BD%D0%B0%D0%B2%D0%B8%D1%81%D3%A3)" title="Пролог (забони барноманависӣ) — tajique" lang="tg" hreflang="tg" data-title="Пролог (забони барноманависӣ)" data-language-autonym="Тоҷикӣ" data-language-local-name="tajique" 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%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B8%A5%E0%B9%87%E0%B8%AD%E0%B8%81" title="ภาษาโปรล็อก — tailandês" lang="th" hreflang="th" data-title="ภาษาโปรล็อก" data-language-autonym="ไทย" data-language-local-name="tailandês" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Prolog" title="Prolog — turco" lang="tr" hreflang="tr" data-title="Prolog" data-language-autonym="Türkçe" data-language-local-name="turco" 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%9F%D1%80%D0%BE%D0%BB%D0%BE%D0%B3_(%D0%BC%D0%BE%D0%B2%D0%B0_%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="Пролог (мова програмування) — ucraniano" lang="uk" hreflang="uk" data-title="Пролог (мова програмування)" data-language-autonym="Українська" data-language-local-name="ucraniano" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wikipedia.org/wiki/Prolog" title="Prolog — usbeque" lang="uz" hreflang="uz" data-title="Prolog" data-language-autonym="Oʻzbekcha / ўзбекча" data-language-local-name="usbeque" class="interlanguage-link-target"><span>Oʻzbekcha / ўзбекча</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Prolog" title="Prolog — vietnamita" lang="vi" hreflang="vi" data-title="Prolog" data-language-autonym="Tiếng Việt" data-language-local-name="vietnamita" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-yo mw-list-item"><a href="https://yo.wikipedia.org/wiki/Prolog" title="Prolog — ioruba" lang="yo" hreflang="yo" data-title="Prolog" data-language-autonym="Yorùbá" data-language-local-name="ioruba" class="interlanguage-link-target"><span>Yorùbá</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Prolog" title="Prolog — chinês" lang="zh" hreflang="zh" data-title="Prolog" data-language-autonym="中文" data-language-local-name="chinês" 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/Prolog" title="Prolog — cantonês" lang="yue" hreflang="yue" data-title="Prolog" data-language-autonym="粵語" data-language-local-name="cantonês" 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/Q163468#sitelinks-wikipedia" title="Editar hiperligações interlínguas" class="wbc-editpage">Editar hiperligações</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="Espaços nominais"> <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/Prolog" title="Ver a página de conteúdo [c]" accesskey="c"><span>Artigo</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Discuss%C3%A3o:Prolog" rel="discussion" title="Discussão sobre o conteúdo da página [t]" accesskey="t"><span>Discussão</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="Mudar a variante da língua" > <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">português</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="Vistas"> <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/Prolog"><span>Ler</span></a></li><li id="ca-ve-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Prolog&veaction=edit" title="Editar esta página [v]" accesskey="v"><span>Editar</span></a></li><li id="ca-edit" class="collapsible vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Prolog&action=edit" title="Editar o código-fonte desta página [e]" accesskey="e"><span>Editar código-fonte</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Prolog&action=history" title="Edições anteriores desta página. [h]" accesskey="h"><span>Ver histórico</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Ferramentas de página"> <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="Ferramentas" > <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">Ferramentas</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">Ferramentas</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">mover para a barra lateral</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">ocultar</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Mais opções" > <div class="vector-menu-heading"> Operações </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/Prolog"><span>Ler</span></a></li><li id="ca-more-ve-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Prolog&veaction=edit" title="Editar esta página [v]" accesskey="v"><span>Editar</span></a></li><li id="ca-more-edit" class="collapsible vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Prolog&action=edit" title="Editar o código-fonte desta página [e]" accesskey="e"><span>Editar código-fonte</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Prolog&action=history"><span>Ver histórico</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Geral </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Especial:P%C3%A1ginas_afluentes/Prolog" title="Lista de todas as páginas que contêm hiperligações para esta [j]" accesskey="j"><span>Páginas afluentes</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Especial:Altera%C3%A7%C3%B5es_relacionadas/Prolog" rel="nofollow" title="Mudanças recentes nas páginas para as quais esta contém hiperligações [k]" accesskey="k"><span>Alterações relacionadas</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:Carregar_ficheiro" title="Carregar ficheiros [u]" accesskey="u"><span>Carregar ficheiro</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Especial:P%C3%A1ginas_especiais" title="Lista de páginas especiais [q]" accesskey="q"><span>Páginas especiais</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Prolog&oldid=67164555" title="Hiperligação permanente para esta revisão desta página"><span>Hiperligação permanente</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Prolog&action=info" title="Mais informações sobre esta página"><span>Informações da página</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Especial:Citar&page=Prolog&id=67164555&wpFormIdentifier=titleform" title="Informação sobre como citar esta página"><span>Citar esta página</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Especial:UrlShortener&url=https%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FProlog"><span>Obter URL encurtado</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Especial:QrCode&url=https%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FProlog"><span>Descarregar código QR</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"> Imprimir/exportar </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=Especial:Livro&bookcmd=book_creator&referer=Prolog"><span>Criar um livro</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Especial:DownloadAsPdf&page=Prolog&action=show-download-screen"><span>Descarregar como PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Prolog&printable=yes" title="Versão para impressão desta página [p]" accesskey="p"><span>Versão para impressão</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"> Noutros projetos </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:Prolog_programming_language" hreflang="en"><span>Wikimedia Commons</span></a></li><li class="wb-otherproject-link wb-otherproject-wikibooks mw-list-item"><a href="https://pt.wikibooks.org/wiki/Prolog" hreflang="pt"><span>Wikilivros</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/Q163468" title="Hiperligação para o elemento do repositório de dados [g]" accesskey="g"><span>Elemento Wikidata</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="Ferramentas de página"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Aspeto"> <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">Aspeto</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">mover para a barra lateral</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">ocultar</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">Origem: Wikipédia, a enciclopédia livre.</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="pt" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r68971778">.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}.mw-parser-output .cmbox{margin:3px 0;border-collapse:collapse;border:1px solid #a2a9b1;background-color:#dfe8ff;box-sizing:border-box;color:var(--color-base)}.mw-parser-output .cmbox-speedy{border:4px solid #b32424;background-color:#ffdbdb}.mw-parser-output .cmbox-delete{background-color:#ffdbdb}.mw-parser-output .cmbox-content{background-color:#ffe7ce}.mw-parser-output .cmbox-style{background-color:#fff9db}.mw-parser-output .cmbox-move{background-color:#e4d8ff}.mw-parser-output .cmbox-protection{background-color:#efefe1}.mw-parser-output .cmbox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .cmbox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .cmbox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .cmbox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .cmbox .mbox-invalid-type{text-align:center}@media(min-width:720px){.mw-parser-output .cmbox{margin:3px 10%}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .cmbox{background-color:#0d1a27}html.skin-theme-clientpref-night .mw-parser-output .cmbox-speedy,html.skin-theme-clientpref-night .mw-parser-output .cmbox-delete{background-color:#300}html.skin-theme-clientpref-night .mw-parser-output .cmbox-content{background-color:#331a00}html.skin-theme-clientpref-night .mw-parser-output .cmbox-style{background-color:#332b00}html.skin-theme-clientpref-night .mw-parser-output .cmbox-move{background-color:#08001a}html.skin-theme-clientpref-night .mw-parser-output .cmbox-protection{background-color:#212112}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cmbox{background-color:#0d1a27}html.skin-theme-clientpref-os .mw-parser-output .cmbox-speedy,html.skin-theme-clientpref-os .mw-parser-output .cmbox-delete{background-color:#300}html.skin-theme-clientpref-os .mw-parser-output .cmbox-content{background-color:#331a00}html.skin-theme-clientpref-os .mw-parser-output .cmbox-style{background-color:#332b00}html.skin-theme-clientpref-os .mw-parser-output .cmbox-move{background-color:#08001a}html.skin-theme-clientpref-os .mw-parser-output .cmbox-protection{background-color:#212112}}.mw-parser-output .fmbox{clear:both;margin:0.2em 0;width:100%;border:1px solid #a2a9b1;background-color:var(--background-color-interactive-subtle,#f8f9fa);box-sizing:border-box;color:var(--color-base,#202122)}.mw-parser-output .fmbox-warning{border:1px solid #bb7070;background-color:#ffdbdb}.mw-parser-output .fmbox-editnotice{background-color:transparent}.mw-parser-output .fmbox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .fmbox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .fmbox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .fmbox .mbox-invalid-type{text-align:center}@media screen{html.skin-theme-clientpref-night .mw-parser-output .fmbox-warning{background-color:#683131}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .fmbox-warning{background-color:#683131}}.mw-parser-output .imbox{margin:4px 0;border-collapse:collapse;border:3px solid #36c;background-color:var(--background-color-interactive-subtle,#f8f9fa);box-sizing:border-box}.mw-parser-output .imbox .mbox-text .imbox{margin:0 -0.5em;display:block}.mw-parser-output .imbox-speedy{border:3px solid #b32424;background-color:#fee7e6}.mw-parser-output .imbox-delete{border:3px solid #b32424}.mw-parser-output .imbox-content{border:3px solid #f28500}.mw-parser-output .imbox-style{border:3px solid #fc3}.mw-parser-output .imbox-move{border:3px solid #9932cc}.mw-parser-output .imbox-protection{border:3px solid #a2a9b1}.mw-parser-output .imbox-license{border:3px solid #88a}.mw-parser-output .imbox-featured{border:3px solid #cba135}.mw-parser-output .imbox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .imbox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .imbox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .imbox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .imbox .mbox-invalid-type{text-align:center}@media(min-width:720px){.mw-parser-output .imbox{margin:4px 10%}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .imbox-speedy{background-color:#310402}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .imbox-speedy{background-color:#310402}}.mw-parser-output .ombox{margin:4px 0;border-collapse:collapse;background-color:var(--background-color-neutral-subtle,#f8f9fa);box-sizing:border-box;border:1px solid #a2a9b1;color:var(--color-base,#202122)}.mw-parser-output .ombox.mbox-small{font-size:88%;line-height:1.25em}.mw-parser-output .ombox-speedy{border:2px solid #b32424;background-color:#fee7e6}.mw-parser-output .ombox-delete{border:2px solid #b32424}.mw-parser-output .ombox-content{border:1px solid #f28500}.mw-parser-output .ombox-style{border:1px solid #fc3}.mw-parser-output .ombox-move{border:1px solid #9932cc}.mw-parser-output .ombox-protection{border:2px solid #a2a9b1}.mw-parser-output .ombox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .ombox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .ombox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .ombox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ombox .mbox-invalid-type{text-align:center}@media(min-width:720px){.mw-parser-output .ombox{margin:4px 10%}.mw-parser-output .ombox.mbox-small{clear:right;float:right;margin:4px 0 4px 1em;width:238px}}body.skin--responsive .mw-parser-output table.ombox img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .ombox-speedy{background-color:#310402}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .ombox-speedy{background-color:#310402}}.mw-parser-output .tmbox{margin:4px 0;border-collapse:collapse;border:1px solid #c0c090;background-color:#f8eaba;box-sizing:border-box}.mw-parser-output .tmbox.mbox-small{font-size:88%;line-height:1.25em}.mw-parser-output .tmbox-speedy{border:2px solid #b32424;background-color:#fee7e6}.mw-parser-output .tmbox-delete{border:2px solid #b32424}.mw-parser-output .tmbox-content{border:1px solid #c0c090}.mw-parser-output .tmbox-style{border:2px solid #fc3}.mw-parser-output .tmbox-move{border:2px solid #9932cc}.mw-parser-output .tmbox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .tmbox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .tmbox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .tmbox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .tmbox .mbox-invalid-type{text-align:center}@media(min-width:720px){.mw-parser-output .tmbox{margin:4px 10%}.mw-parser-output .tmbox.mbox-small{clear:right;float:right;margin:4px 0 4px 1em;width:238px}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .tmbox{background-color:#2e2505}html.skin-theme-clientpref-night .mw-parser-output .tmbox-speedy{background-color:#310402}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .tmbox{background-color:#2e2505}html.skin-theme-clientpref-os .mw-parser-output .tmbox-speedy{background-color:#310402}}body.skin--responsive .mw-parser-output table.tmbox img{max-width:none!important}</style><table class="box-Mais_notas plainlinks metadata ambox ambox-content ambox-Refimprove" role="presentation"><tbody><tr><td class="mbox-image"><div style="width:52px"><span typeof="mw:File"><a href="/wiki/Ficheiro:Question_book-new.svg" class="mw-file-description"><img alt="Esta página cita fontes, mas não cobrem todo o conteúdo" src="//upload.wikimedia.org/wikipedia/commons/thumb/9/99/Question_book-new.svg/50px-Question_book-new.svg.png" decoding="async" width="50" height="39" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/9/99/Question_book-new.svg/75px-Question_book-new.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/99/Question_book-new.svg/100px-Question_book-new.svg.png 2x" data-file-width="512" data-file-height="399" /></a></span></div></td><td class="mbox-text"><div class="mbox-text-span">Esta página <a href="/wiki/Wikip%C3%A9dia:Livro_de_estilo/Cite_as_fontes" title="Wikipédia:Livro de estilo/Cite as fontes">cita fontes</a>, mas que <b><a href="/wiki/Wikip%C3%A9dia:V" class="mw-redirect" title="Wikipédia:V">não cobrem</a> todo o conteúdo</b>.<span class="hide-when-compact"> Ajude a <a href="/wiki/Wikip%C3%A9dia:Livro_de_estilo/Refer%C3%AAncias_e_notas_de_rodap%C3%A9" title="Wikipédia:Livro de estilo/Referências e notas de rodapé">inserir referências</a> (<small><i>Encontre fontes:</i> <span class="plainlinks"><a rel="nofollow" class="external text" href="https://wikipedialibrary.wmflabs.org/">ABW</a>  •  <a rel="nofollow" class="external text" href="https://www.periodicos.capes.gov.br">CAPES</a>  •  <a rel="nofollow" class="external text" href="https://www.google.com/search?as_eq=wikipedia&as_epq=Prolog">Google</a> (<a rel="nofollow" class="external text" href="https://www.google.com/search?hl=pt&tbm=nws&q=Prolog&oq=Prolog">N</a> • <a rel="nofollow" class="external text" href="http://books.google.com/books?&as_brr=0&as_epq=Prolog">L</a> • <a rel="nofollow" class="external text" href="https://scholar.google.com/scholar?hl=pt&q=Prolog">A</a>)</span></small>).</span> <small class="date-container"><i>(<span class="date">Novembro de 2012</span>)</i></small></div></td></tr></tbody></table> <table class="infobox infobox_v2" cellpadding="3" border="0" style="width: 20em; text-align: left; font-size: 88%;"> <tbody><tr> <th colspan="2" class="topo computador" style="text-align: center; inherit"><span class="">Prolog</span> </th></tr> <tr> <td scope="row" style="vertical-align: top; text-align: left; font-weight:bold; text-align:left;"><a href="/wiki/Paradigma_de_programa%C3%A7%C3%A3o" title="Paradigma de programação">Paradigma</a> </td> <td class="hlist" style="vertical-align: top; text-align: left;"><a href="/wiki/Programa%C3%A7%C3%A3o_l%C3%B3gica" title="Programação lógica">lógico</a>, <a href="/wiki/Programa%C3%A7%C3%A3o_declarativa" title="Programação declarativa">declarativo</a> </td></tr> <tr> <td scope="row" style="vertical-align: top; text-align: left; font-weight:bold; text-align:left;">Surgido em </td> <td style="vertical-align: top; text-align: left;"><a href="/wiki/1972" title="1972">1972</a> </td></tr> <tr> <td scope="row" style="vertical-align: top; text-align: left; font-weight:bold; text-align:left;">Criado por </td> <td class="hlist" style="vertical-align: top; text-align: left;"><a href="/wiki/Alain_Colmerauer" title="Alain Colmerauer">Alain Colmerauer</a> e <a href="/w/index.php?title=Robert_Kowalski&action=edit&redlink=1" class="new" title="Robert Kowalski (página não existe)">Robert Kowalski</a> </td></tr> <tr> <td scope="row" style="vertical-align: top; text-align: left; font-weight:bold; text-align:left;">Principais implementações </td> <td class="hlist" style="vertical-align: top; text-align: left;"><a href="/wiki/GNU_Prolog" title="GNU Prolog">GNU Prolog</a>, <a href="/w/index.php?title=Quintus&action=edit&redlink=1" class="new" title="Quintus (página não existe)">Quintus</a>, <a href="/w/index.php?title=SICStus&action=edit&redlink=1" class="new" title="SICStus (página não existe)">SICStus</a>, <a href="/wiki/SWI-Prolog" title="SWI-Prolog">SWI-Prolog</a>, <a href="/w/index.php?title=YAP&action=edit&redlink=1" class="new" title="YAP (página não existe)">YAP</a> </td></tr> <tr> <td scope="row" style="vertical-align: top; text-align: left; font-weight:bold; text-align:left;">Dialetos </td> <td class="hlist" style="vertical-align: top; text-align: left;">ISO Prolog, Edinburgh Prolog </td></tr> <tr> <td scope="row" style="vertical-align: top; text-align: left; font-weight:bold; text-align:left;">Influenciou </td> <td class="hlist" style="vertical-align: top; text-align: left;">Mercury, <a href="/wiki/Oz_(linguagem_de_programa%C3%A7%C3%A3o)" title="Oz (linguagem de programação)">Oz</a> </td></tr> </tbody></table> <p><b>Prolog (Programação Lógica)</b> é uma <a href="/wiki/Linguagens_de_programa%C3%A7%C3%A3o" class="mw-redirect" title="Linguagens de programação">linguagem de programação</a> que se enquadra no paradigma de Programação em Lógica Matemática. É uma linguagem de uso geral que é especialmente associada com a <a href="/wiki/Intelig%C3%AAncia_artificial" title="Inteligência artificial">inteligência artificial</a> e <a href="/wiki/Lingu%C3%ADstica_computacional" title="Linguística computacional">linguística computacional</a>. Consiste numa linguagem puramente lógica, que pode ser chamada de <i>Prolog puro</i>, e numa linguagem concreta, a qual acrescenta o Prolog puro com componentes <i>extra-lógicos</i>. </p><p>O uso Prolog puro foi originalmente restrito em provas do <a href="/wiki/Resolu%C3%A7%C3%A3o" class="mw-disambig" title="Resolução">teorema da resolução</a> com <a href="/wiki/Cl%C3%A1usula_de_Horn" title="Cláusula de Horn">Cláusulas de Horn</a> do formato </p> <dl><dd><code>H :- B<sub>1</sub>, …, B<sub>n</sub>.</code>.</dd></dl> <p>A aplicação do provador de teoremas trata estas cláusulas como procedimentos </p> <dl><dd>para mostrar/resolver <code>H</code>, mostrar/resolver <code>B<sub>1</sub></code> and … and <code>B<sub>n</sub></code>.</dd></dl> <p>O Prolog puro foi então estendido para incluir a <a href="/wiki/Nega%C3%A7%C3%A3o_por_falha" title="Negação por falha">negação por falha</a>, na qual condições negativas da forma not(B<sub>i</sub>) são mostradas por tentativa e falha para resolver as condições positivas correspondentes B<sub>i</sub>). </p><p>O nome <i>Prolog</i> para a linguagem concreta foi escolhido por <a href="/w/index.php?title=Philippe_Roussel&action=edit&redlink=1" class="new" title="Philippe Roussel (página não existe)">Philippe Roussel</a> como uma abreviação de “<b>PRO</b>grammation en <b>LOG</b>ique”. Foi criada em meados de 1972 por <a href="/wiki/Alain_Colmerauer" title="Alain Colmerauer">Alain Colmerauer</a> e Philippe Roussel, baseados no conceito de <a href="/w/index.php?title=Robert_Kowalski&action=edit&redlink=1" class="new" title="Robert Kowalski (página não existe)">Robert Kowalski</a> da interpretação procedimental das cláusulas de Horn. A motivação para isso veio em parte da vontade de reconciliar o uso da lógica como uma linguagem declarativa de representação do conhecimento com a representação procedimental do conhecimento, que era popular na América do Norte no final da década de 1960 para início de 1970. </p><p>Muito do desenvolvimento moderno do Prolog veio dos projetos de <a href="/wiki/Computa%C3%A7%C3%A3o_da_quinta_gera%C3%A7%C3%A3o" title="Computação da quinta geração">computadores da quinta geração</a> (FGCS), que desenvolveu uma variante do Prolog chamada <i>Kernel Language</i> para seu primeiro <a href="/wiki/Sistema_operacional" class="mw-redirect" title="Sistema operacional">sistema operacional</a>. </p><p>Apesar do longo tempo de desenvolvimento, Prolog ainda não é uma linguagem portável, já que cada implementação usa rotinas completamente diferentes e incompatíveis entre si. Por exemplo, um programa trivial que faz um loop de ler uma linha da console e escreve a mesma linha, terminando quando for entrada uma linha vazia, é impossível de ser escrito de forma que qualquer interpretador consiga rodar. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="História"><span id="Hist.C3.B3ria"></span>História</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=1" title="Editar secção: História" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=1" title="Editar código-fonte da secção: História"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A linguagem de programação Prolog nasceu de um projeto que não tinha por foco a implementação de uma linguagem de programação, mas o processamento de linguagens naturais. Na Universidade de Marselha, Alain Colmerauer e Robert Pasero trabalhavam na parte de linguagem natural e Jean Trudel e Philippe Roussel trabalhavam na parte de dedução do projeto. Interessado pelo método de resolução SL, Trudel persuadiu um dos seus inventores, Robert Kowalski, que se uniu ao projeto. O projeto resultou em uma versão preliminar da linguagem Prolog em fins de 1971 sendo que a versão definitiva apareceu em fins de 1972<sup id="cite_ref-hoplii_1-0" class="reference"><a href="#cite_note-hoplii-1"><span>[</span>1<span>]</span></a></sup>. </p> <div class="mw-heading mw-heading2"><h2 id="Características"><span id="Caracter.C3.ADsticas"></span>Características</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=2" title="Editar secção: Características" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=2" title="Editar código-fonte da secção: Características"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>O Prolog é uma linguagem declarativa, significando que em vez de o programa estipular a maneira de chegar à solução, passo a passo, (como nas linguagens procedimentais ou imperativas), limita-se a fornecer uma descrição do problema que se pretende computar. Usa uma coleção <a href="/wiki/Banco_de_dados" title="Banco de dados">base de dados</a> de <i>fatos</i> e de relações lógicas (<i>regras</i>) que exprimem o domínio relacional do problema a resolver. </p><p>Um programa pode rodar num modo interativo, a partir de consultas (queries) formuladas pelo usuário, usando a base de dados (os 'fatos') e as regras relacionais (essencialmente implicações lógicas: se.. então), e o mecanismo de unificação para produzir (por uma cadeia de deduções lógicas) a solução. </p><p>O Prolog é baseado num subconjunto do <a href="/wiki/L%C3%B3gica_de_primeira_ordem" title="Lógica de primeira ordem">cálculo de predicados de primeira ordem</a>, o que é definido por <a href="/wiki/Cl%C3%A1usula_de_Horn" title="Cláusula de Horn">cláusulas de Horn</a>. A execução de um programa em Prolog é efetivamente a prova de um teorema por <a href="/wiki/Princ%C3%ADpio_da_resolu%C3%A7%C3%A3o" title="Princípio da resolução">resolução de primeira ordem</a>. Alguns conceitos fundamentais são <a href="/wiki/Unifica%C3%A7%C3%A3o" title="Unificação">unificação</a>, <a href="/wiki/Recurs%C3%A3o" class="mw-redirect" title="Recursão">recursão</a>, e <a href="/wiki/Backtracking" title="Backtracking">backtracking</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Tipos_de_dados">Tipos de dados</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=3" title="Editar secção: Tipos de dados" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=3" title="Editar código-fonte da secção: Tipos de dados"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Prolog não emprega <a href="/wiki/Tipos_de_dados" class="mw-redirect" title="Tipos de dados">tipos de dados</a> do mesmo modo que as linguagens de programação mais comuns normalmente fazem. Todos os dados são tratados como sendo de um único tipo, <b>Termo</b>, cuja natureza depende da forma como esse termo foi declarado. Ou seja, os elementos léxicos utilizados na sua declaração determinam se esse termo será um número, um texto, uma variável, uma estrutura complexa e assim por diante. </p> <div class="mw-heading mw-heading3"><h3 id="Escopo_dos_identificadores">Escopo dos identificadores</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=4" title="Editar secção: Escopo dos identificadores" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=4" title="Editar código-fonte da secção: Escopo dos identificadores"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Com exceção de átomos numéricos, funções ou predicados construídos, os nomes em Prolog para constantes, variáveis, funções e predicados, não têm nenhum significado intrínseco e podem ser escolhidos livremente pelo programador. Em geral, duas notações distintas denotarão ou serão objetos distintos. Como em qualquer linguagem de programação, a cada nome deve ser dado um escopo. </p><p>Em Prolog, as regras de escopo são: </p> <ul><li>O escopo de uma variável é a asserção (fato, regra, ou consulta) na qual aparece.</li> <li>O escopo de qualquer outro nome (constante, nome de função, ou nome de predicado) é todo o programa.</li></ul> <p>Isto significa que um nome de variável pode ser utilizado e reutilizado a vontade no programa para denotar variáveis diferentes, enquanto qualquer outra notação representa, ou é, o mesmo objeto para o programa todo. </p> <div class="mw-heading mw-heading3"><h3 id="Átomos"><span id=".C3.81tomos"></span>Átomos</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=5" title="Editar secção: Átomos" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=5" title="Editar código-fonte da secção: Átomos"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>As constantes de texto são introduzidas por meio de átomos. Um átomo é uma sequência constituída de letras, números e <a href="/wiki/Underscore" class="mw-redirect" title="Underscore">underscore</a>, mas iniciando com uma letra minúscula. Se um átomo não alfanumérico é necessário, pode-se usar qualquer sequência entre aspas simples (ex: 'um átomo contendo espaços'). </p><p>Um átomo pode ser definido das seguintes maneiras: </p><p>começando com letra minúscula: </p> <pre>pedro henrique_iv </pre> <p>como uma sequência de caracteres entre aspas simples: </p> <pre>'quem é você?' 'eu não sei'. </pre> <div class="mw-heading mw-heading3"><h3 id="Números"><span id="N.C3.BAmeros"></span>Números</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=6" title="Editar secção: Números" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=6" title="Editar código-fonte da secção: Números"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Um número é uma sequência de dígitos, permitindo também os sinais de <b>.</b> (para números reais), <b>-</b> (número negativo) e <b>e</b> (<a href="/wiki/Nota%C3%A7%C3%A3o_cient%C3%ADfica" title="Notação científica">notação científica</a>). Algumas implementações do Prolog não fazem distinção entre inteiros e números reais. </p><p>exemplos: </p> <pre>321 3.21 </pre> <div class="mw-heading mw-heading3"><h3 id="Variáveis"><span id="Vari.C3.A1veis"></span>Variáveis</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=7" title="Editar secção: Variáveis" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=7" title="Editar código-fonte da secção: Variáveis"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Variáveis são declaradas da mesma forma que átomos, porém iniciando com uma letra maiúscula ou underscore. No ambiente Prolog uma variável não é um <a href="/w/index.php?title=Container_(programa%C3%A7%C3%A3o)&action=edit&redlink=1" class="new" title="Container (programação) (página não existe)">contêiner</a> cujo valor pode ser atribuído (como ocorre nas <a href="/wiki/Programa%C3%A7%C3%A3o_imperativa" title="Programação imperativa">linguagens imperativas</a>). Seu comportamento é mais próximo de um padrão, que é incrementalmente especificado pela <a href="/wiki/Unifica%C3%A7%C3%A3o" title="Unificação">unificação</a>. Em outras palavras, uma variável Prolog é como uma incógnita, cujo valor é desconhecido a princípio mas, após descoberto, não sofre mais mudanças. </p><p>Um tipo especial de variável, a <i>variável anônima</i> (explicada mais adiante), é uma expressão que significa 'qualquer variável', e é escrita como um único subtraço (_). </p><p>exemplos: </p> <pre>X Nome Rei_da_Espanha </pre> <div class="mw-heading mw-heading3"><h3 id="Termos_compostos">Termos compostos</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=8" title="Editar secção: Termos compostos" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=8" title="Editar código-fonte da secção: Termos compostos"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Termos compostos são a única forma de se expressar estruturas de dados complexas em Prolog. Um termo composto consiste de uma cabeça, também chamada funtor (que é obrigatoriamente um átomo) e parâmetros (de quaisquer tipos) listados entre parênteses e separados por vírgulas. </p><p>O número de parâmetros, chamado <a href="/wiki/Aridade" title="Aridade">aridade</a> do termo, é significativo. Um termo é identificado por sua cabeça e aridade, normalmente escrita como funtor/aridade. Átomos e números também podem ser identificados dessa forma, como um termo de aridade zero (ex: um_atomo/0). </p> <div class="mw-heading mw-heading3"><h3 id="Listas">Listas</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=9" title="Editar secção: Listas" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=9" title="Editar código-fonte da secção: Listas"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Uma lista não é um tipo de dados à parte, mas sim definida por uma construção recursiva (usando o termo '.'/2): </p> <ol><li>o átomo [] é uma lista vazia;</li> <li>se <i>T</i> é uma lista e <i>H</i> é um elemento, então o termo '.'(<i>H</i>, <i>T</i>) é uma lista.</li></ol> <p>O primeiro elemento, chamado cabeça, é <i>H</i>, que é seguida pelo conteúdo do restante da lista, <i>T</i>, também chamado de cauda. A lista [1, 2, 3] seria representada internamente como '.'(1, '.'(2, '.'(3, []))). Um atalho sintático é [<i>H</i> | <i>T</i>], que é mais usado para construir regras. Uma lista pode ser processada como um todo processando o primeiro elemento, e em seguida o restante da lista, de forma <a href="/wiki/Recursividade" title="Recursividade">recursiva</a>. </p><p>Para conveniência do programador, as listas podem ser construídas e destruídas de várias formas. </p> <ul><li>Enumerando os elementos: [abc, 1, f(X), <i>Y</i>, g(<i>A</i>,rst)]</li> <li>Precedendo-a com um elemento: [abc | <i>L1</i>]</li> <li>Precedendo-a com múltiplos elementos: [abc, 1, f(X) | <i>L2</i>]</li> <li>Expandindo o termo: '.'(abc, '.'(1, '.'(f(X), '.'(<i>Y</i>, '.'(g(<i>A</i>,rst), [])))))</li> <li>O predicado <b>append</b></li></ul> <div class="mw-heading mw-heading3"><h3 id="Strings">Strings</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=10" title="Editar secção: Strings" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=10" title="Editar código-fonte da secção: Strings"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Strings são normalmente escritas como uma sequência de caracteres entre aspas. É comum serem representadas internamente como listas de códigos de caracteres, em geral utilizando a codificação local ou <a href="/wiki/Unicode" title="Unicode">Unicode</a>, se o sistema dá suporte a Unicode. O ISO Prolog também permite que strings sejam representadas por uma lista de átomos com um único caractere. </p> <div class="mw-heading mw-heading2"><h2 id="Fatos">Fatos</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=11" title="Editar secção: Fatos" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=11" title="Editar código-fonte da secção: Fatos"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Programar em Prolog é bem diferente de programar em uma linguagem procedimental. Em Prolog se fornece fatos e regras para uma base de dados; então se executam consultas ou (<i>queries</i>) a essa base de dados. A unidade básica do Prolog é o predicado, que é postulado verdadeiro. Um predicado consiste de uma cabeça e um número de argumentos. Por exemplo: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">gato</span><span class="p">(</span><span class="s s-Atom">tom</span><span class="p">).</span> </pre></div> <p>Isso informa à base de dados o fato que 'tom' é um 'gato'. Formalmente, 'gato' é a cabeça e 'tom' é o único argumento do predicado. Alguns exemplos de consultas que podem ser feitas ao interpretador Prolog baseado nesse fato: </p><p><i>tom é um gato?</i> </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="s s-Atom">?-</span> <span class="nf">gato</span><span class="p">(</span><span class="s s-Atom">tom</span><span class="p">).</span> <span class="s s-Atom">yes</span><span class="p">.</span> </pre></div> <p><i>que coisas (conhecidas) são gatos?</i> </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="s s-Atom">?-</span> <span class="nf">gato</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> <span class="nv">X</span> <span class="o">=</span> <span class="s s-Atom">tom</span><span class="p">;</span> <span class="s s-Atom">yes</span><span class="p">.</span> </pre></div> <p>Predicados são normalmente definidos para expressar algum fato sobre o mundo que o programa deve conhecer. Na maioria dos casos, o uso de predicados requer uma certa convenção. Por exemplo, qual das duas versões abaixo significaria que José é o pai de Ana? </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">pai</span><span class="p">(</span><span class="s s-Atom">ana</span><span class="p">,</span><span class="s s-Atom">jose</span><span class="p">).</span> <span class="nf">pai</span><span class="p">(</span><span class="s s-Atom">jose</span><span class="p">,</span><span class="s s-Atom">ana</span><span class="p">).</span> </pre></div> <p>Em ambos os casos 'pai' é a cabeça e 'ana' e 'jose' são argumentos. Entretanto, no primeiro caso Ana vem primeiro na lista de argumentos, e no segundo, quem vem primeiro é José (a ordem nos argumentos é importante). O primeiro caso é um exemplo de definição na ordem <b>Verbo Sujeito Objeto</b>, e o segundo, na ordem <b>Verbo Objeto Sujeito</b>. Como Prolog não entende português, ambas as versões estão corretas de acordo com seu escopo; no entanto é uma boa prática de programação escolher uma única convenção para ser usada no mesmo programa, para evitar escrever algo como </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">pai</span><span class="p">(</span><span class="s s-Atom">jose</span><span class="p">,</span><span class="s s-Atom">ana</span><span class="p">).</span> <span class="nf">pai</span><span class="p">(</span><span class="s s-Atom">maria</span><span class="p">,</span><span class="s s-Atom">joao</span><span class="p">).</span> </pre></div> <p>Alguns predicados são pre-definidos na própria linguagem, permitindo que os programas Prolog desempenhem atividades rotineiras (como entrada/saída, uso de gráficos e outros tipos de comunicação com o sistema operacional). Por exemplo, o predicado <code>write</code> pode ser usado para saída na tela. Então, </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">write</span><span class="p">(</span><span class="s s-Atom">'Olá'</span><span class="p">).</span> </pre></div> <p>vai exibir a palavra 'Olá' na tela. </p> <div class="mw-heading mw-heading2"><h2 id="Regras">Regras</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=12" title="Editar secção: Regras" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=12" title="Editar código-fonte da secção: Regras"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>O segundo tipo de predicado no Prolog é a regra, também chamada de "cláusula". Um exemplo de uma regra é: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">luz</span><span class="p">(</span><span class="s s-Atom">acesa</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">interruptor</span><span class="p">(</span><span class="s s-Atom">ligado</span><span class="p">).</span> </pre></div> <p>O ":-" significa "se"; essa regra significa que luz(acesa) é verdadeiro se interruptor(ligado) é verdadeiro. Regras podem também fazer uso de variáveis, como por exemplo, </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">avo</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Z</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">pai</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">),</span> <span class="nf">pai</span><span class="p">(</span><span class="nv">Y</span><span class="p">,</span><span class="nv">Z</span><span class="p">).</span> </pre></div> <p>(X é avô de Z se X é pai de Y e Y é pai de Z) </p><p>Isso significa "se alguém é pai de outra pessoa, que por sua vez é pai de uma terceira, então ele é avô". O antecedente e o consequente estão na ordem inversa do que é normalmente encontrado na notação da lógica: o consequente é escrito primeiro e é chamado a <b>cabeça</b> da regra, o antecedente é chamado <b>corpo</b>. A conjunção (e) é escrita como ",", enquanto a disjunção (ou) é escrita como ";". Também é possível colocar múltiplos predicados em um mesmo corpo, unindo seus antecedentes por disjunção, como por exemplo: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">a</span> <span class="o">:-</span> <span class="s s-Atom">b</span><span class="p">;</span><span class="s s-Atom">c</span><span class="p">;</span><span class="s s-Atom">d</span><span class="p">.</span> </pre></div> <p>que é equivalente às três regras separadas: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">a</span> <span class="o">:-</span> <span class="s s-Atom">b</span><span class="p">.</span> <span class="nf">a</span> <span class="o">:-</span> <span class="s s-Atom">c</span><span class="p">.</span> <span class="nf">a</span> <span class="o">:-</span> <span class="s s-Atom">d</span><span class="p">.</span> </pre></div> <p>No entanto não são permitidas regras como: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="s s-Atom">a</span><span class="p">;</span><span class="nf">b</span> <span class="o">:-</span> <span class="s s-Atom">c</span><span class="p">.</span> </pre></div> <p>Ou seja, "se c então a ou b". Isso é devido à restrição às <a href="/wiki/Cl%C3%A1usula_de_Horn" title="Cláusula de Horn">cláusulas de Horn</a>. </p><p>Uma maneira de simular tal regra, usando o operador de negação, é: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nn">a</span><span class="p">:</span><span class="o">-</span><span class="s s-Atom">c</span><span class="p">,</span><span class="o">not</span><span class="p">(</span><span class="s s-Atom">b</span><span class="p">).</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Regras_Recursivas">Regras Recursivas</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=13" title="Editar secção: Regras Recursivas" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=13" title="Editar código-fonte da secção: Regras Recursivas"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Regras <a href="/wiki/Recursividade" title="Recursividade">recursivas</a> devem ser permitidas a fim de tornar a linguagem útil para muitas aplicações. Um predicado definido por uma regra recursiva deve necessariamente ter, no mínimo uma definição não recursiva. Se isto não acontecer, a definição é logicamente mal-formada e o programa ficaria em <a href="/wiki/La%C3%A7o_infinito" title="Laço infinito">laço infinito</a>. Um exemplo de regra recursiva seria a definição de uma base de dados sobre relações familiares que responda questões sobre ancestralidade. Isto pode ser definido da seguinte forma: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">ancestral</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">mãe</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">).</span> <span class="nf">ancestral</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">pai</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">).</span> <span class="nf">ancestral</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">mãe</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Z</span><span class="p">),</span><span class="nf">ancestral</span><span class="p">(</span><span class="nv">Z</span><span class="p">,</span><span class="nv">Y</span><span class="p">).</span> <span class="nf">ancestral</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">pai</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Z</span><span class="p">),</span><span class="nf">ancestral</span><span class="p">(</span><span class="nv">Z</span><span class="p">,</span><span class="nv">Y</span><span class="p">).</span> </pre></div> <p>Além disso, é necessário tomar cuidado com a ordem na qual <a href="/wiki/Unifica%C3%A7%C3%A3o" title="Unificação">unificações</a>(ver Unificação em Prolog) são procurados para objetivos. Se invertermos a ordem nas regras recursivas do predicado ancestral, isto é </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">ancestral</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">ancestral</span><span class="p">(</span><span class="nv">Z</span><span class="p">,</span><span class="nv">Y</span><span class="p">),</span><span class="nf">mãe</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Z</span><span class="p">).</span> <span class="nf">ancestral</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">ancestral</span><span class="p">(</span><span class="nv">Z</span><span class="p">,</span><span class="nv">Y</span><span class="p">),</span><span class="nf">pai</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Z</span><span class="p">).</span> </pre></div> <p>a consulta resultará uma recursão infinita. </p> <div class="mw-heading mw-heading4"><h4 id="Recursão_em_cauda"><span id="Recurs.C3.A3o_em_cauda"></span>Recursão em cauda</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=14" title="Editar secção: Recursão em cauda" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=14" title="Editar código-fonte da secção: Recursão em cauda"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Uma função <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle f}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>f</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle f}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/132e57acb643253e7810ee9702d9581f159a1c61" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:1.279ex; height:2.509ex;" alt="{\displaystyle f}"></span> pode ser definida por recursão em cauda da seguinte maneira: </p> <pre>f(x): se c(x) então g(x) senão f(h(x)) </pre> <p>onde: - <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c(x)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>c</mi> <mo stretchy="false">(</mo> <mi>x</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle c(x)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/b20e1deb5bbfe90c658811e9635d865f02902791" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.146ex; height:2.843ex;" alt="{\displaystyle c(x)}"></span> é algum tipo de condição sobre o valor de <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>x</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle x}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/87f9e315fd7e2ba406057a97300593c4802b53e4" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.33ex; height:1.676ex;" alt="{\displaystyle x}"></span>; - <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle g(x),h(x)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>g</mi> <mo stretchy="false">(</mo> <mi>x</mi> <mo stretchy="false">)</mo> <mo>,</mo> <mi>h</mi> <mo stretchy="false">(</mo> <mi>x</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle g(x),h(x)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/d5a45b19288232b7177ad5c398589dac59c65d70" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:9.767ex; height:2.843ex;" alt="{\displaystyle g(x),h(x)}"></span> são funções definidas com um argumento não definido na função <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle f}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>f</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle f}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/132e57acb643253e7810ee9702d9581f159a1c61" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:1.279ex; height:2.509ex;" alt="{\displaystyle f}"></span>. </p><p>A mesma sentença pode ser escrita em Prolog desta forma: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">f</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Z</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">c</span><span class="p">(</span><span class="nv">X</span><span class="p">),</span> <span class="nf">g</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Z</span><span class="p">).</span> <span class="nf">f</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Z</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">h</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">),</span> <span class="nf">f</span><span class="p">(</span><span class="nv">Y</span><span class="p">,</span> <span class="nv">Z</span><span class="p">).</span> </pre></div> <p>Recursão em cauda é importante e preferível sobre recursão não cauda pois pode ser implementada como uma iteração que é computada usando uma pilha estática. </p> <div class="mw-heading mw-heading4"><h4 id="Recursão_não_em_cauda"><span id="Recurs.C3.A3o_n.C3.A3o_em_cauda"></span>Recursão não em cauda</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=15" title="Editar secção: Recursão não em cauda" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=15" title="Editar código-fonte da secção: Recursão não em cauda"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Recursão não em cauda pode ser definida pela sentença </p> <pre>f(x): se c(x) então g(x) senão k(x, f(h(x))) </pre> <p>Isto significa que o valor da chamada de recursão é modificado após sua computação. Em Prolog, esta função pode ser implementada assim: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">f</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">c</span><span class="p">(</span><span class="nv">X</span><span class="p">),</span> <span class="nf">g</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">).</span> <span class="nf">f</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">h</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">X1</span><span class="p">),</span> <span class="nf">f</span><span class="p">(</span><span class="nv">X1</span><span class="p">,</span> <span class="nv">Y1</span><span class="p">),</span> <span class="nf">k</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y1</span><span class="p">,</span> <span class="nv">Y</span><span class="p">).</span> </pre></div> <p>Recursão em não cauda usa um espaço linear na pilha, consequentemente evitado caso não seja necessário. Em alguns casos é possível otimizar a implementação. Considere o esquema: </p> <pre>f(n): se n = 0 então a senão k(n, f(n - 1)) </pre> <p>Isto pode ser escrito em Prolog usando recursão não em cauda: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">f</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="s s-Atom">a</span><span class="p">).</span> <span class="nf">f</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nv">X1</span> <span class="o">is</span> <span class="nv">X</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="nf">f</span><span class="p">(</span><span class="nv">X1</span><span class="p">,</span> <span class="nv">Y1</span><span class="p">),</span> <span class="nf">k</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y1</span><span class="p">,</span> <span class="nv">Y</span><span class="p">).</span> </pre></div> <p>Este código requer espaço linear na pilha para guardar resultados temporários de chamadas recursivas. Usando um acumulador, o código abaixo pode ser escrito usando recursão em cauda: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">f</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">f</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s s-Atom">a</span><span class="p">,</span> <span class="nv">Y</span><span class="p">).</span> <span class="nf">f</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">M</span><span class="p">,</span> <span class="nv">ACC</span><span class="p">,</span> <span class="nv">ACC</span><span class="p">)</span> <span class="p">:-</span> <span class="nv">M</span> <span class="o">></span> <span class="nv">N</span><span class="p">.</span> <span class="nf">f</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">M</span><span class="p">,</span> <span class="nv">ACC</span><span class="p">,</span> <span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nv">M</span> <span class="s s-Atom"><=</span> <span class="nv">N</span><span class="p">,</span> <span class="nf">k</span><span class="p">(</span><span class="nv">M</span><span class="p">,</span> <span class="nv">ACC</span><span class="p">,</span> <span class="nv">ACC1</span><span class="p">),</span> <span class="nv">M1</span> <span class="o">is</span> <span class="nv">M</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nf">f</span><span class="p">(</span><span class="nv">N</span><span class="p">,</span> <span class="nv">M1</span><span class="p">,</span> <span class="nv">ACC1</span><span class="p">,</span> <span class="nv">Y</span><span class="p">)</span> </pre></div> <p><br /> </p> <div class="mw-heading mw-heading2"><h2 id="Avaliação"><span id="Avalia.C3.A7.C3.A3o"></span>Avaliação</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=16" title="Editar secção: Avaliação" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=16" title="Editar código-fonte da secção: Avaliação"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Quando o interpretador recebe uma consulta, ele tenta encontrar predicados que se encaixam na consulta, sejam eles fatos diretos ou regras que possuem o termo consultado como conclusão. Por exemplo: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">irmaos</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">filho</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Z</span><span class="p">),</span> <span class="nf">filho</span><span class="p">(</span><span class="nv">Y</span><span class="p">,</span><span class="nv">Z</span><span class="p">).</span> </pre></div><p>que em Lógica de Primeira ordem é: <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \forall }"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi mathvariant="normal">∀<!-- ∀ --></mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle \forall }</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/bfc1a1a9c4c0f8d5df989c98aa2773ed657c5937" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.293ex; height:2.176ex;" alt="{\displaystyle \forall }"></span>X<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \forall }"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi mathvariant="normal">∀<!-- ∀ --></mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle \forall }</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/bfc1a1a9c4c0f8d5df989c98aa2773ed657c5937" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.293ex; height:2.176ex;" alt="{\displaystyle \forall }"></span>Y<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \forall }"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi mathvariant="normal">∀<!-- ∀ --></mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle \forall }</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/bfc1a1a9c4c0f8d5df989c98aa2773ed657c5937" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.293ex; height:2.176ex;" alt="{\displaystyle \forall }"></span>Z((filho(X,Z)^filho(Y,Z))<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mo stretchy="false">→<!-- → --></mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/53e574cc3aa5b4bf5f3f5906caf121a378eef08b" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }"></span>irmãos(X,Y)) </p><div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">filho</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">pai</span><span class="p">(</span><span class="nv">Y</span><span class="p">,</span><span class="nv">X</span><span class="p">).</span> <span class="nf">filho</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">mae</span><span class="p">(</span><span class="nv">Y</span><span class="p">,</span><span class="nv">X</span><span class="p">).</span> <span class="nf">mae</span><span class="p">(</span><span class="s s-Atom">marcia</span><span class="p">,</span> <span class="s s-Atom">ana</span><span class="p">).</span> <span class="nf">pai</span><span class="p">(</span><span class="s s-Atom">tomas</span><span class="p">,</span> <span class="s s-Atom">ana</span><span class="p">).</span> <span class="nf">pai</span><span class="p">(</span><span class="s s-Atom">tomas</span><span class="p">,</span> <span class="s s-Atom">erica</span><span class="p">).</span> <span class="nf">pai</span><span class="p">(</span><span class="s s-Atom">marcos</span><span class="p">,</span> <span class="s s-Atom">tomas</span><span class="p">).</span> </pre></div> <p>De acordo com essa base, a seguinte consulta é avaliada como verdadeira: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="s s-Atom">?-</span> <span class="nf">irmaos</span><span class="p">(</span><span class="s s-Atom">ana</span><span class="p">,</span> <span class="s s-Atom">erica</span><span class="p">).</span> <span class="s s-Atom">yes</span><span class="p">.</span> </pre></div> <p>O interpretador chega a esse resultado utilizando a regra <i>irmaos(X,Y)</i>, <a href="/wiki/Unifica%C3%A7%C3%A3o" title="Unificação">unificando</a> <i>ana</i> com <i>X</i> e <i>erica</i> com <i>Y</i>. Isso significa que a consulta pode ser expandida para <i>filho(ana,Z)</i>, <i>filho(erica,Z)</i>. A <a href="/wiki/Princ%C3%ADpio_da_resolu%C3%A7%C3%A3o" title="Princípio da resolução">resolução</a> dessa conjunção é feita procurando-se todos os pais possíveis para <i>ana</i>. Entretanto, <i>filho(ana,marcia)</i> não leva a uma solução viável, porque se <i>Z</i> for substituído por <i>marcia</i>, <i>filho(erica,marcia)</i> deveria ser verdadeiro, e nenhum fato afirma (nem há nenhuma regra que possa satisfazer) que isso está presente. Então, em vez disso, <i>Z</i> é substituído por <i>tomas</i>, descobrindo-se que <i>erica</i> e <i>ana</i> são irmãos de qualquer forma. O código </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">filho</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">pai</span><span class="p">(</span><span class="nv">Y</span><span class="p">,</span><span class="nv">X</span><span class="p">).</span> </pre></div> <p>pode parecer suspeito. Afinal, nem só pais têm filhos. No entanto esse código significa, na verdade, que todo o pai tem filhos (da mesma forma que a regra seguinte significa que toda a mãe tem filhos). Para descobrir se alguém é pai, pode-se usar o código </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="s s-Atom">?-</span> <span class="nf">pai</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="k">_</span><span class="p">).</span> </pre></div> <p>ou </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">pai</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">pai</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="k">_</span><span class="p">).</span> </pre></div> <p>que simplesmente não se importa com quem é o filho (o underscore "_" é uma variável anônima). </p> <div class="mw-heading mw-heading3"><h3 id="Negação"><span id="Nega.C3.A7.C3.A3o"></span>Negação</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=17" title="Editar secção: Negação" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=17" title="Editar código-fonte da secção: Negação"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Tipicamente, uma consulta é avaliada como falsa no caso de não estar presente nenhuma regra positiva ou fato que dê suporte ao termo proposto. Isso é chamado <a href="/w/index.php?title=Hip%C3%B3tese_do_mundo_fechado&action=edit&redlink=1" class="new" title="Hipótese do mundo fechado (página não existe)">hipótese do mundo fechado</a>; assume-se que tudo o que é importante saber está na base de dados, de modo que não existe um mundo exterior que pode possuir evidências desconhecidas. Em outras palavras, se um fato não é conhecido ser verdadeiro (ou falso), assume-se que ele é falso. </p><p>Uma regra como </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">legal</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="s s-Atom">\+</span> <span class="nf">ilegal</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> </pre></div> <p>pode ser avaliada somente pela busca exaustiva de todas as coisas que são ilegais e comparando elas com X, e se nenhum fato ilegal for descoberto ser o mesmo que X, X é legal. Isso é chamado <a href="/wiki/Nega%C3%A7%C3%A3o_por_falha" title="Negação por falha">negação por falha</a>. O operador prefixo \+/1 (muitos dialetos do Prolog possuem pré-definido o comando <i>not/1</i>) usado acima implementa a negação por falha em compiladores ISO Prolog. </p> <div class="mw-heading mw-heading2"><h2 id="Operadores_de_Controle">Operadores de Controle</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=18" title="Editar secção: Operadores de Controle" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=18" title="Editar código-fonte da secção: Operadores de Controle"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Backtracking">Backtracking</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=19" title="Editar secção: Backtracking" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=19" title="Editar código-fonte da secção: Backtracking"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Backtracking é um procedimento dentro da <a href="/wiki/Linguagem" title="Linguagem">linguagem</a> Prolog. Uma busca inicial em um programa nesta linguagem segue o padrão <a href="/wiki/Busca_em_profundidade" title="Busca em profundidade">Busca em profundidade</a> (<i>depth-first search</i>), ou seja, a <a href="/wiki/%C3%81rvore" title="Árvore">árvore</a> é percorrida sistematicamente de cima para baixo e da esquerda para direita. Quando essa pesquisa falha, ou é encontrado um <a href="/wiki/N%C3%B3_terminal_da_%C3%A1rvore" title="Nó terminal da árvore">nó terminal da árvore</a>, entra em funcionamento o mecanismo de backtracking. Esse procedimento faz com que o sistema retorne pelo mesmo caminho percorrido com a finalidade de encontrar soluções alternativas. </p><p>Exemplo: </p><p>Considerando uma base de dados família, fazemos a seguinte consulta: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="s s-Atom">?-</span> <span class="nf">pai</span><span class="p">(</span><span class="s s-Atom">roberto</span><span class="p">,</span><span class="nv">X</span><span class="p">),</span> <span class="nf">mae</span><span class="p">(</span><span class="s s-Atom">vera</span><span class="p">,</span><span class="nv">X</span><span class="p">)</span> </pre></div> <p>O compilador tenta satisfazer o primeiro objetivo. Quando conseguir, tenta satisfazer o segundo. Caso não consiga, ele retorna ao ponto onde encontrou a solução para o primeiro objetivo (<i>backtracking</i>). </p> <div class="mw-heading mw-heading3"><h3 id="Comando_Cut">Comando <i>Cut</i></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=20" title="Editar secção: Comando Cut" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=20" title="Editar código-fonte da secção: Comando Cut"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>O comando <i>cut</i> permite indicar ao Prolog quais sub-objetivos já satisfeitos não necessitam ser reconsiderados ao se realizar um <a href="/wiki/Backtracking" title="Backtracking">backtracking</a>. Isto é, ele aborta o processo de backtracking. O uso do comando cut é importante porque permite que o programa rode mais rápido, sem perder tempo com sub-objetivos que não contribuem para determinar a resposta do objetivo principal. Além disso, o programa ocupará menos memória, pois não será necessário armazenar todos os sub-objetivos considerados (pontos do backtracking). Em alguns casos, o cut evita que o programa entre em <a href="/wiki/La%C3%A7o_infinito" title="Laço infinito">laço infinito</a>. </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">cabeça</span> <span class="o">:-</span> <span class="s s-Atom">objetivo</span><span class="o"><</span><span class="s s-Atom">sub</span><span class="o">></span><span class="mi">1</span><span class="s s-Atom"></sub></span><span class="p">,</span> <span class="p">...,</span> <span class="s s-Atom">objetivo</span><span class="o"><</span><span class="s s-Atom">sub</span><span class="o">></span><span class="s s-Atom">n</sub></span><span class="p">,</span> <span class="p">!,</span> <span class="s s-Atom">objetivo</span><span class="o"><</span><span class="s s-Atom">sub</span><span class="o">></span><span class="s s-Atom">n</span><span class="o">+</span><span class="mi">1</span><span class="s s-Atom"></sub></span><span class="p">,</span> <span class="p">...,</span> <span class="s s-Atom">objetivo</span><span class="o"><</span><span class="s s-Atom">sub</span><span class="o">></span><span class="s s-Atom">n</span><span class="o">+</span><span class="s s-Atom">m</sub</span><span class="o">></span> </pre></div> <p>Exemplo (o código abaixo faz a consulta ao banco e para na primeira ocorrência de filho do sexo masculino): </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">primogenito</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span><span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">pai</span><span class="p">(</span><span class="nv">Y</span><span class="p">,</span><span class="nv">X</span><span class="p">),</span> <span class="nf">masculino</span><span class="p">(</span><span class="nv">X</span><span class="p">),</span> <span class="p">!</span> </pre></div> <p>Algumas das principais aplicações do cut são as seguintes: </p> <pre> • Unificação de padrões, de forma que quando um padrão é encontrado os outros padrões possí-veis são descartados • Na implementação da negação como regra de falha • Para eliminar da árvore de pesquisa soluções alternativas quando uma só é suficiente • Para encerrar a pesquisa quando a continuação iria conduzir a uma pesquisa infinita, etc. </pre> <p>Sintaticamente o uso do cut em uma cláusula tem a aparência de um objetivo sem nenhum argumento, representado por um ponto de exclamação "!". </p> <div class="mw-heading mw-heading3"><h3 id="Comando_Fail">Comando <i>Fail</i></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=21" title="Editar secção: Comando Fail" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=21" title="Editar código-fonte da secção: Comando Fail"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Inversamente ao comando <i>cut</i>, o predicado pré-definido <i>fail</i> sempre falha. O operador de corte pode ser combinado com o predicado <i>fail</i> para produzir uma falha forçada. Uma conjunção de objetivos da forma </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">cabeça</span> <span class="o">:-</span> <span class="s s-Atom">objetivo</span><span class="o"><</span><span class="s s-Atom">sub</span><span class="o">></span><span class="mi">1</span><span class="s s-Atom"></sub></span><span class="p">,</span> <span class="p">...,</span> <span class="s s-Atom">objetivo</span><span class="o"><</span><span class="s s-Atom">sub</span><span class="o">></span><span class="s s-Atom">n</sub></span><span class="p">,</span> <span class="p">!,</span> <span class="s s-Atom">fail</span><span class="p">.</span> </pre></div> <p>é usada para informar ao PROLOG: <i>se a execução chegou até esse ponto, então pode abandonar a tentativa de satisfazer a regra</i>. A conjunção falha devido ao <i>fail</i>, e o objetivo-pai falha devido ao corte. </p><p>Exemplo (Ana gosta de mamíferos, exceto de gatos): </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">mamifero</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">gato</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> <span class="nf">mamifero</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">cachorro</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> <span class="nf">mamifero</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">rato</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> <span class="nf">gato</span><span class="p">(</span><span class="s s-Atom">tom</span><span class="p">).</span> <span class="nf">rato</span><span class="p">(</span><span class="s s-Atom">jerry</span><span class="p">).</span> <span class="nf">cachorro</span><span class="p">(</span><span class="s s-Atom">spike</span><span class="p">).</span> <span class="nf">gosta</span><span class="p">(</span><span class="s s-Atom">ana</span><span class="p">,</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">gato</span><span class="p">(</span><span class="nv">X</span><span class="p">),!,</span><span class="s s-Atom">fail</span><span class="p">.</span> <span class="nf">gosta</span><span class="p">(</span><span class="s s-Atom">ana</span><span class="p">,</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">mamifero</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> <span class="c1">%consultas</span> <span class="c1">%gosta(ana,tom). % false</span> <span class="c1">%gosta(ana,jerry). % true.</span> <span class="c1">%gosta(ana,X). % false - resultado inadequado</span> </pre></div> <div class="mw-heading mw-heading2"><h2 id="Execução"><span id="Execu.C3.A7.C3.A3o"></span>Execução</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=22" title="Editar secção: Execução" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=22" title="Editar código-fonte da secção: Execução"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Prolog é uma linguagem de <a href="/wiki/Programa%C3%A7%C3%A3o_l%C3%B3gica" title="Programação lógica">programação lógica</a>, portanto em teoria o programador não deveria ter de se preocupar com o modo como ela executa. Entretanto, às vezes é prudente levar em conta como o <a href="/wiki/Princ%C3%ADpio_da_resolu%C3%A7%C3%A3o" title="Princípio da resolução">algoritmo de inferência</a> funciona, para evitar que o programa Prolog execute por um tempo denecessariamente longo (ou mesmo infinito). </p><p>Por exemplo, pode-se escrever um código para contar o número de elementos em uma lista. </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">elems</span><span class="p">([],</span><span class="mi">0</span><span class="p">).</span> <span class="nf">elems</span><span class="p">([</span><span class="nv">H</span><span class="p">|</span><span class="nv">T</span><span class="p">],</span> <span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">elems</span><span class="p">(</span><span class="nv">T</span><span class="p">,</span> <span class="nv">Y</span><span class="p">),</span> <span class="nv">X</span> <span class="o">is</span> <span class="nv">Y</span> <span class="o">+</span> <span class="mf">1.</span> </pre></div> <p>Isso simplesmente diz: Se a lista está vazia, o número de elementos é zero. Se a lista não é vazia, então X é um a mais que Y, que por sua vez é o número de elementos no restante da lista, excluído-se seu primeiro elemento. </p><p>Nesse caso, existe uma distinção clara entre os casos no antecedente das regras. Mas no caso a seguir, onde se decide por continuar ou não jogando em um cassino: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">jogar</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">temdinheiro</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> <span class="nf">jogar</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">temcredito</span><span class="p">(</span><span class="nv">X</span><span class="p">),</span> <span class="s s-Atom">\+</span> <span class="nf">temdinheiro</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> </pre></div> <p>Se você tem dinheiro, você continua jogando. Se você perdeu todo o dinheiro, você precisa pegar emprestado, ou então não é possível jogar mais. temdinheiro(X) pode ser uma função muito custosa - por exemplo, ela pode acessar sua conta de banco na internet para verificar seu saldo, o que leva tempo. Entretanto, o mesmo pode-se dizer de temcredito(X). </p><p>Em teoria, as implementações Prolog poderiam avaliar essas regras fora de ordem, de modo que elas poderiam ser escritas como: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">jogar</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">temcredito</span><span class="p">(</span><span class="nv">X</span><span class="p">),</span> <span class="s s-Atom">\+</span> <span class="nf">temdinheiro</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> <span class="nf">jogar</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">temdinheiro</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> </pre></div> <p>Isso está correto, porque as duas opções se excluem mutuamente. Entretanto, verificar se você precisa de um empréstimo não é necessário se você já sabe que tem dinheiro. Então, na prática, implementações Prolog vão verificar a primeira regra primeiro (de fato, a maioria delas vai sempre tentar as regras na ordem em que estão presentes na base). Pode-se usar o operador de corte para informar ao interpretador para não testar a segunda opção se a primeira é suficiente. Por exemplo: </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">jogar</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">temdinheiro</span><span class="p">(</span><span class="nv">X</span><span class="p">),!.</span> <span class="nf">jogar</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">temcredito</span><span class="p">(</span><span class="nv">X</span><span class="p">),</span> <span class="s s-Atom">\+</span> <span class="nf">temdinheiro</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> </pre></div> <p>Isso é chamado um <i>operador de corte</i> <i>verde</i>. O ! simplesmente informa ao interpretador para parar de buscar por alternativas. Mas deve-se notar que se você precisa de um empréstimo será necessário verificar a segunda regra, e isso será feito. Verificando o temdinheiro na segunda regra é desnecessário, já que é conhecido o fato de que você não tem, ou a segunda regra não seria sequer avaliada. Então pode-se modificar o código para </p> <div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span> <span class="nf">jogar</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">temdinheiro</span><span class="p">(</span><span class="nv">X</span><span class="p">),!.</span> <span class="nf">jogar</span><span class="p">(</span><span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">temcredito</span><span class="p">(</span><span class="nv">X</span><span class="p">).</span> </pre></div> <p>Isso é chamado um <i>operador de corte</i> <i>vermelho</i>, porque é arriscado fazer isso. O programa agora depende da colocação correta do operador de corte e da ordem das regras para determinar seu significado lógico. Acidentes de recorta-e-cola por exemplo são comuns e difíceis de detectar. Se as regras forem misturadas, você pode terminar estourando seu cartão de crédito antes de gastar seu dinheiro. </p> <div class="mw-heading mw-heading2"><h2 id="DCGs_e_parsing">DCGs e parsing</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=23" title="Editar secção: DCGs e parsing" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=23" title="Editar código-fonte da secção: DCGs e parsing"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="hatnote"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Magnifying_glass_01.svg/17px-Magnifying_glass_01.svg.png" decoding="async" width="17" height="17" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Magnifying_glass_01.svg/26px-Magnifying_glass_01.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Magnifying_glass_01.svg/34px-Magnifying_glass_01.svg.png 2x" data-file-width="663" data-file-height="659" /></span></span>Ver artigo principal: <a href="/wiki/Gram%C3%A1tica_de_cl%C3%A1usulas_definidas" title="Gramática de cláusulas definidas">gramática de cláusulas definidas</a></div> <p>Existe uma notação especial chamada <a href="/wiki/Gram%C3%A1tica_de_cl%C3%A1usulas_definidas" title="Gramática de cláusulas definidas">gramática de cláusulas definidas</a> (<i>definite clause grammar</i> - DCGs). Uma regra definida via -->/2 em vez de :-/2 é expandida pelo pré-processador (expand_term/2, uma facilidade análoga às macros em outras linguagens) de acordo com algumas regras de reescrita, resultando em cláusulas Prolog ordinárias. DCGs são usadas para escrever <a href="/wiki/Parser" class="mw-redirect" title="Parser">parsers</a> e geradores de listas, e também provém uma interface conveniente para operações sobre diferenças de listas. </p> <div class="mw-heading mw-heading2"><h2 id="Exemplos_de_código"><span id="Exemplos_de_c.C3.B3digo"></span>Exemplos de código</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=24" title="Editar secção: Exemplos de código" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=24" title="Editar código-fonte da secção: Exemplos de código"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Seguem alguns exemplos de programas escritos em ISO-Prolog. </p> <div class="mw-heading mw-heading3"><h3 id="Hello_World">Hello World</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=25" title="Editar secção: Hello World" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=25" title="Editar código-fonte da secção: Hello World"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div><p> Um exemplo de uma consulta:</p><div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="s s-Atom">?-</span> <span class="nf">write</span><span class="p">(</span><span class="s s-Atom">'Hello World!'</span><span class="p">),</span> <span class="s s-Atom">nl</span><span class="p">.</span> <span class="nv">Hello</span> <span class="nv">World</span><span class="p">!</span> <span class="s s-Atom">true</span><span class="p">.</span> <span class="s s-Atom">?-</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Quicksort">Quicksort</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=26" title="Editar secção: Quicksort" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=26" title="Editar código-fonte da secção: Quicksort"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div><p> O algoritmo do <a href="/wiki/Quicksort" title="Quicksort">quicksort</a>, usado para ordenação de listas.</p><div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">split</span><span class="p">(</span><span class="nv">H</span><span class="p">,</span> <span class="p">[</span><span class="nv">A</span><span class="p">|</span><span class="nv">X</span><span class="p">],</span> <span class="p">[</span><span class="nv">A</span><span class="p">|</span><span class="nv">Y</span><span class="p">],</span> <span class="nv">Z</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">order</span><span class="p">(</span><span class="nv">A</span><span class="p">,</span> <span class="nv">H</span><span class="p">),</span> <span class="nf">split</span><span class="p">(</span><span class="nv">H</span><span class="p">,</span> <span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">,</span> <span class="nv">Z</span><span class="p">).</span> <span class="nf">split</span><span class="p">(</span><span class="nv">H</span><span class="p">,</span> <span class="p">[</span><span class="nv">A</span><span class="p">|</span><span class="nv">X</span><span class="p">],</span> <span class="nv">Y</span><span class="p">,</span> <span class="p">[</span><span class="nv">A</span><span class="p">|</span><span class="nv">Z</span><span class="p">])</span> <span class="p">:-</span> <span class="o">not</span><span class="p">(</span><span class="nf">order</span><span class="p">(</span><span class="nv">A</span><span class="p">,</span> <span class="nv">H</span><span class="p">)),</span> <span class="nf">split</span><span class="p">(</span><span class="nv">H</span><span class="p">,</span> <span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">,</span> <span class="nv">Z</span><span class="p">).</span> <span class="nf">split</span><span class="p">(</span><span class="k">_</span><span class="p">,</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[]).</span> <span class="nf">quicksort</span><span class="p">([],</span> <span class="nv">X</span><span class="p">,</span> <span class="nv">X</span><span class="p">).</span> <span class="nf">quicksort</span><span class="p">([</span><span class="nv">H</span><span class="p">|</span><span class="nv">T</span><span class="p">],</span> <span class="nv">S</span><span class="p">,</span> <span class="nv">X</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">split</span><span class="p">(</span><span class="nv">H</span><span class="p">,</span> <span class="nv">T</span><span class="p">,</span> <span class="nv">A</span><span class="p">,</span> <span class="nv">B</span><span class="p">),</span> <span class="nf">quicksort</span><span class="p">(</span><span class="nv">A</span><span class="p">,</span> <span class="nv">S</span><span class="p">,</span> <span class="p">[</span><span class="nv">H</span><span class="p">|</span><span class="nv">Y</span><span class="p">]),</span> <span class="nf">quicksort</span><span class="p">(</span><span class="nv">B</span><span class="p">,</span> <span class="nv">Y</span><span class="p">,</span> <span class="nv">X</span><span class="p">).</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Torres_de_Hanoi">Torres de Hanoi</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=27" title="Editar secção: Torres de Hanoi" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=27" title="Editar código-fonte da secção: Torres de Hanoi"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div><p> A resolução do problema <a href="/wiki/Torre_de_Han%C3%B3i" title="Torre de Hanói">Torre de Hanói</a> implementado em prolog.</p><div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">hanoi</span><span class="p">(</span><span class="nv">N</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">move</span><span class="p">(</span><span class="nv">N</span><span class="p">,</span> <span class="s s-Atom">left</span><span class="p">,</span> <span class="s s-Atom">center</span><span class="p">,</span> <span class="s s-Atom">right</span><span class="p">).</span> <span class="nf">move</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="k">_</span><span class="p">,</span> <span class="k">_</span><span class="p">,</span> <span class="k">_</span><span class="p">)</span> <span class="p">:-</span> <span class="p">!.</span> <span class="nf">move</span><span class="p">(</span><span class="nv">N</span><span class="p">,</span> <span class="nv">A</span><span class="p">,</span> <span class="nv">B</span><span class="p">,</span> <span class="nv">C</span><span class="p">)</span> <span class="p">:-</span> <span class="nv">M</span> <span class="o">is</span> <span class="nv">N</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="nf">move</span><span class="p">(</span><span class="nv">M</span><span class="p">,</span> <span class="nv">A</span><span class="p">,</span> <span class="nv">C</span><span class="p">,</span> <span class="nv">B</span><span class="p">),</span> <span class="nf">inform</span><span class="p">(</span><span class="nv">A</span><span class="p">,</span> <span class="nv">B</span><span class="p">),</span> <span class="nf">move</span><span class="p">(</span><span class="nv">M</span><span class="p">,</span> <span class="nv">C</span><span class="p">,</span> <span class="nv">B</span><span class="p">,</span> <span class="nv">A</span><span class="p">).</span> <span class="nf">inform</span><span class="p">(</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">write</span><span class="p">(</span><span class="s s-Atom">'move a disc from the '</span><span class="p">),</span><span class="nf">write</span><span class="p">(</span><span class="nv">X</span><span class="p">),</span> <span class="nf">write</span><span class="p">(</span><span class="s s-Atom">' pole to the '</span><span class="p">),</span> <span class="nf">write</span><span class="p">(</span><span class="nv">Y</span><span class="p">),</span> <span class="nf">write</span><span class="p">(</span><span class="s s-Atom">' pole'</span><span class="p">),</span> <span class="s s-Atom">nl</span><span class="p">.</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Mergesort">Mergesort</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=28" title="Editar secção: Mergesort" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=28" title="Editar código-fonte da secção: Mergesort"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div><p> Algoritmo de ordenação de listas <a href="/wiki/Merge_sort" title="Merge sort">Merge sort</a> implementado em prolog.</p><div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">split</span><span class="p">([],</span> <span class="nv">K</span><span class="p">,</span> <span class="p">[],</span> <span class="p">[]).</span> <span class="nf">split</span><span class="p">(</span><span class="nv">XS</span><span class="p">,</span> <span class="nv">K</span><span class="p">,</span> <span class="p">[],</span> <span class="nv">XS</span><span class="p">)</span> <span class="p">:-</span> <span class="nv">K</span> <span class="o"><</span> <span class="mf">1.</span> <span class="nf">split</span><span class="p">([</span><span class="nv">X</span><span class="p">|</span><span class="nv">XS</span><span class="p">],</span> <span class="nv">K</span><span class="p">,</span> <span class="p">[</span><span class="nv">X</span><span class="p">|</span><span class="nv">YS</span><span class="p">],</span> <span class="nv">ZS</span><span class="p">)</span> <span class="p">:-</span> <span class="nv">K</span> <span class="o">>=</span> <span class="mi">1</span><span class="p">,</span> <span class="nv">P</span> <span class="o">is</span> <span class="nv">K</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="nf">split</span><span class="p">(</span><span class="nv">XS</span><span class="p">,</span> <span class="nv">P</span><span class="p">,</span> <span class="nv">YS</span><span class="p">,</span> <span class="nv">ZS</span><span class="p">).</span> <span class="nf">merge1</span><span class="p">([],</span> <span class="p">[],</span> <span class="p">[]).</span> <span class="nf">merge1</span><span class="p">(</span><span class="nv">XS</span><span class="p">,</span> <span class="p">[],</span> <span class="nv">XS</span><span class="p">).</span> <span class="nf">merge1</span><span class="p">([],</span> <span class="nv">YS</span><span class="p">,</span> <span class="nv">YS</span><span class="p">).</span> <span class="nf">merge1</span><span class="p">([</span><span class="nv">X</span><span class="p">|</span><span class="nv">XS</span><span class="p">],</span> <span class="p">[</span><span class="nv">Y</span><span class="p">|</span><span class="nv">YS</span><span class="p">],</span> <span class="p">[</span><span class="nv">X</span><span class="p">|</span><span class="nv">ZS</span><span class="p">])</span> <span class="p">:-</span> <span class="nv">X</span> <span class="o">=<</span> <span class="nv">Y</span><span class="p">,</span> <span class="nf">merge1</span><span class="p">(</span><span class="nv">XS</span><span class="p">,</span> <span class="p">[</span><span class="nv">Y</span><span class="p">|</span><span class="nv">YS</span><span class="p">],</span> <span class="nv">ZS</span><span class="p">).</span> <span class="nf">merge1</span><span class="p">([</span><span class="nv">X</span><span class="p">|</span><span class="nv">XS</span><span class="p">],</span> <span class="p">[</span><span class="nv">Y</span><span class="p">|</span><span class="nv">YS</span><span class="p">],</span> <span class="p">[</span><span class="nv">Y</span><span class="p">|</span><span class="nv">ZS</span><span class="p">])</span> <span class="p">:-</span> <span class="nv">Y</span> <span class="o"><</span> <span class="nv">X</span><span class="p">,</span> <span class="nf">merge1</span><span class="p">([</span><span class="nv">X</span><span class="p">|</span><span class="nv">XS</span><span class="p">],</span> <span class="nv">YS</span><span class="p">,</span> <span class="nv">ZS</span><span class="p">).</span> <span class="nf">mergesort</span><span class="p">([],</span> <span class="p">[]).</span> <span class="nf">mergesort</span><span class="p">([</span><span class="nv">X</span><span class="p">],</span> <span class="p">[</span><span class="nv">X</span><span class="p">]).</span> <span class="nf">mergesort</span><span class="p">([</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">],</span> <span class="p">[</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">])</span> <span class="p">:-</span> <span class="nv">X</span> <span class="o">=<</span> <span class="nv">Y</span><span class="p">,</span> <span class="p">!.</span> <span class="nf">mergesort</span><span class="p">([</span><span class="nv">X</span><span class="p">,</span> <span class="nv">Y</span><span class="p">],</span> <span class="p">[</span><span class="nv">Y</span><span class="p">,</span> <span class="nv">X</span><span class="p">])</span> <span class="p">:-</span> <span class="nv">X</span> <span class="o">></span> <span class="nv">Y</span><span class="p">,</span> <span class="p">!.</span> <span class="nf">mergesort</span><span class="p">(</span><span class="nv">XS</span><span class="p">,</span> <span class="nv">ZS</span><span class="p">)</span> <span class="p">:-</span> <span class="nf">length</span><span class="p">(</span><span class="nv">XS</span><span class="p">,</span> <span class="nv">L</span><span class="p">),</span> <span class="nv">L</span> <span class="o">></span> <span class="mi">0</span><span class="p">,</span> <span class="nv">K</span> <span class="o">is</span> <span class="nv">L</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="nf">split</span><span class="p">(</span><span class="nv">XS</span><span class="p">,</span> <span class="nv">K</span><span class="p">,</span> <span class="nv">XS1</span><span class="p">,</span> <span class="nv">XS2</span><span class="p">),</span> <span class="nf">mergesort</span><span class="p">(</span><span class="nv">XS1</span><span class="p">,</span> <span class="nv">YS1</span><span class="p">),</span> <span class="nf">mergesort</span><span class="p">(</span><span class="nv">XS2</span><span class="p">,</span> <span class="nv">YS2</span><span class="p">),</span> <span class="nf">merge1</span><span class="p">(</span><span class="nv">YS1</span><span class="p">,</span> <span class="nv">YS2</span><span class="p">,</span> <span class="nv">ZS</span><span class="p">),</span> <span class="p">!.</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Implementações"><span id="Implementa.C3.A7.C3.B5es"></span>Implementações</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=29" title="Editar secção: Implementações" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=29" title="Editar código-fonte da secção: Implementações"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>LPA Prolog (<a rel="nofollow" class="external text" href="http://www.lpa.co.uk/">http://www.lpa.co.uk/</a>)</li> <li>Open Prolog (<a rel="nofollow" class="external text" href="http://www.cs.tcd.ie/open-prolog/">http://www.cs.tcd.ie/open-prolog/</a>)</li> <li>Ciao Prolog (<a rel="nofollow" class="external text" href="http://www.clip.dia.fi.upm.es/Software/Ciao">http://www.clip.dia.fi.upm.es/Software/Ciao</a>)</li> <li>GNU Prolog (<a rel="nofollow" class="external text" href="http://www.gprolog.org">http://www.gprolog.org</a>)</li> <li>YAP Prolog (<a rel="nofollow" class="external text" href="https://web.archive.org/web/20040706004345/http://www.ncc.up.pt/~vsc/Yap/">https://web.archive.org/web/20040706004345/http://www.ncc.up.pt/~vsc/Yap/</a>)</li> <li>SWI Prolog (<a rel="nofollow" class="external text" href="http://www.swi-prolog.org">http://www.swi-prolog.org</a>)</li> <li>Strawberry Prolog (<a rel="nofollow" class="external text" href="http://www.dobrev.com/">http://www.dobrev.com/</a>)</li> <li>SICStus Prolog (<a rel="nofollow" class="external text" href="http://www.sics.se/sicstus/">http://www.sics.se/sicstus/</a>)</li> <li>Amzi! Prolog (<a rel="nofollow" class="external text" href="http://www.amzi.com/">http://www.amzi.com/</a>)</li> <li>B-Prolog (<a rel="nofollow" class="external text" href="http://www.probp.com/">http://www.probp.com/</a>)</li> <li>tuProlog (<a rel="nofollow" class="external text" href="http://tuprolog.sourceforge.net/">http://tuprolog.sourceforge.net/</a>) - Código Aberto integrável ao Java</li> <li>XSB (<a rel="nofollow" class="external text" href="http://xsb.sourceforge.net/">http://xsb.sourceforge.net/</a>)</li> <li>Trinc Prolog (<a rel="nofollow" class="external text" href="http://www.trinc-prolog.com">http://www.trinc-prolog.com</a>)</li> <li>hProlog (<a rel="nofollow" class="external free" href="http://www.cs.kuleuven.ac.be/~bmd/hProlog/">http://www.cs.kuleuven.ac.be/~bmd/hProlog/</a>)</li> <li>ilProlog (<a rel="nofollow" class="external free" href="https://web.archive.org/web/20090830031456/http://www.pharmadm.com/dmax.asp">https://web.archive.org/web/20090830031456/http://www.pharmadm.com/dmax.asp</a>)</li> <li>CxProlog (<a rel="nofollow" class="external free" href="http://ctp.di.fct.unl.pt/~amd/cxprolog/">http://ctp.di.fct.unl.pt/~amd/cxprolog/</a>)</li> <li>NanoProlog (<a rel="nofollow" class="external free" href="http://ctp.di.fct.unl.pt/~amd/cxprolog/">http://ctp.di.fct.unl.pt/~amd/cxprolog/</a>)</li> <li>Visual Prolog (<a rel="nofollow" class="external free" href="http://visual-prolog.com/">http://visual-prolog.com/</a>)</li> <li>Schelog (<a rel="nofollow" class="external free" href="https://ds26gte.github.io/schelog/index.html">https://ds26gte.github.io/schelog/index.html</a>)</li></ul> <div class="mw-heading mw-heading2"><h2 id="Extensões"><span id="Extens.C3.B5es"></span>Extensões</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=30" title="Editar secção: Extensões" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=30" title="Editar código-fonte da secção: Extensões"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>Visual Prolog (<a rel="nofollow" class="external free" href="http://www.visual-prolog.com/">http://www.visual-prolog.com/</a>), também conhecido como PDC Prolog e Turbo Prolog. Visual Prolog é um dialeto de Prolog fortemente tipado que é consideravelmente diferente do Prolog padrão. Foi desenvolvido e divulgado como Turbo Prolog enquanto sob controle da Borland, mas hoje é desenvolvido pela empresa Danish PDC (Prolog Development Center) que foi quem o criou.</li></ul> <div class="mw-heading mw-heading2"><h2 id="Referências"><span id="Refer.C3.AAncias"></span>Referências</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=31" title="Editar secção: Referências" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=31" title="Editar código-fonte da secção: Referências"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="http://www.csse.monash.edu.au/~lloyd/tildeLogic/Prolog.toy/Examples/">Runnable examples</a></li> <li><a rel="nofollow" class="external text" href="http://ktiml.mff.cuni.cz/~bartak/prolog/testing.html">A Prolog interpreter in a Java applet</a></li> <li><a rel="nofollow" class="external text" href="http://pauillac.inria.fr/~deransar/prolog/docs.html">Prolog: The ISO standard</a></li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20050322110024/http://www.visual-prolog.com/vip6/Tutorial/">Fundamental Prolog Tutorial</a></li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20041204041813/http://cs.wwc.edu/~cs_dept/KU/PR/Prolog.html">Prolog Tutorial</a></li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20050322110024/http://www.visual-prolog.com/vip6/Tutorial/">Visual Prolog Tutorial</a></li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20050529083245/http://www.visual-prolog.com/vip6/Community/examples.htm">Visual Prolog Examples</a></li> <li><a rel="nofollow" class="external text" href="http://www.pdc.dk">Prolog Development Center</a></li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20030727192519/http://www.lim.univ-mrs.fr/~colmer/ArchivesPublications/HistoireProlog/19november92.pdf">Alain Colmerauer's and Philippe Roussel's account of the birth of Prolog</a></li> <li>BEDREGAL, Benjamín Callejas; ACIOLY, Benedito Melo. Lógica para Ciência da Computação, versão preliminar 2006.</li> <li><cite class="citation book">Sterling, Leon; Shapiro, Ehud (1986). <i>The Art of Prolog</i>. Advanced Programming Techniques. Cambridge: The MIT Press. 437 páginas. <a href="/wiki/International_Standard_Book_Number" title="International Standard Book Number">ISBN</a> <a href="/wiki/Especial:Fontes_de_livros/0-262-19250-0" title="Especial:Fontes de livros/0-262-19250-0">0-262-19250-0</a></cite><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fpt.wikipedia.org%3AProlog&rft.au=Sterling%2C+Leon%3B+Shapiro%2C+Ehud&rft.btitle=The+Art+of+Prolog&rft.date=1986&rft.genre=book&rft.isbn=0-262-19250-0&rft.place=Cambridge&rft.pub=The+MIT+Press&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span><span class="citation-comment" style="display:none; color:#33aa33"> !CS1 manut: Nomes múltiplos: lista de autores (<a href="/wiki/Categoria:!CS1_manut:_Nomes_m%C3%BAltiplos:_lista_de_autores" title="Categoria:!CS1 manut: Nomes múltiplos: lista de autores">link</a>)</span></li></ul> <h2 id="Referências_2" style="cursor: help;" title="Esta seção foi configurada para não ser editável diretamente. Edite a página toda ou a seção anterior em vez disso."><span id="Refer.C3.AAncias_2"></span>Referências</h2> <div class="reflist" style="list-style-type: decimal;"><div class="mw-references-wrap"><ol class="references"> <li id="cite_note-hoplii-1"><span class="mw-cite-backlink"><a href="#cite_ref-hoplii_1-0">↑</a></span> <span class="reference-text"><cite class="citation book">BERGIN, Thomas J.; GIBSON, Richard G. (1996). <i>History of Programming Languages II</i>. New York: ACM Press, Addison-Wesley. 864 páginas. <a href="/wiki/International_Standard_Book_Number" title="International Standard Book Number">ISBN</a> <a href="/wiki/Especial:Fontes_de_livros/0-201-89502-1" title="Especial:Fontes de livros/0-201-89502-1">0-201-89502-1</a></cite><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fpt.wikipedia.org%3AProlog&rft.au=BERGIN%2C+Thomas+J.%3B+GIBSON%2C+Richard+G.&rft.btitle=History+of+Programming+Languages+II&rft.date=1996&rft.genre=book&rft.place=New+York&rft.pub=ACM+Press%2C+Addison-Wesley&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span><span class="citation-comment" style="display:none; color:#33aa33"> !CS1 manut: Nomes múltiplos: lista de autores (<a href="/wiki/Categoria:!CS1_manut:_Nomes_m%C3%BAltiplos:_lista_de_autores" title="Categoria:!CS1 manut: Nomes múltiplos: lista de autores">link</a>)</span></span> </li> </ol></div></div> <div class="mw-heading mw-heading2"><h2 id="Ligações_externas"><span id="Liga.C3.A7.C3.B5es_externas"></span>Ligações externas</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Prolog&veaction=edit&section=32" title="Editar secção: Ligações externas" class="mw-editsection-visualeditor"><span>editar</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Prolog&action=edit&section=32" title="Editar código-fonte da secção: Ligações externas"><span>editar código-fonte</span></a><span class="mw-editsection-bracket">]</span></span></div> <table class="infobox noprint" style="width:250px; line-height:2.2em; font-size:90%"> <tbody><tr style="line-height:1.3em"> <td colspan="2" style="text-align: center;">Outros projetos <a href="/wiki/Wikimedia" class="mw-redirect" title="Wikimedia">Wikimedia</a> também contêm material sobre este tema: </td></tr> <tr> <th><span typeof="mw:File"><a href="https://pt.wikibooks.org/wiki/Special:Search/Prolog" title="Wikilivros"><img alt="Wikilivros" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/21px-Wikibooks-logo.svg.png" decoding="async" width="21" height="21" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/32px-Wikibooks-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikibooks-logo.svg/42px-Wikibooks-logo.svg.png 2x" data-file-width="300" data-file-height="300" /></a></span> </th> <td><a href="https://pt.wikibooks.org/wiki/Special:Search/Prolog" class="extiw" title="b:Special:Search/Prolog"><span title="Procurar por livros e manuais no Wikilivros"><b>Livros e manuais</b></span></a> no <a href="https://pt.wikibooks.org/wiki/P%C3%A1gina_principal" class="extiw" title="b:Página principal"><span title="Wikilivros">Wikilivros</span></a> </td></tr> </tbody></table><div id="interProject" style="display:none;"> <ul><li><a href="https://pt.wikibooks.org/wiki/Special:Search/Prolog" class="extiw" title="b:Special:Search/Prolog"><span title="Wikilivros">Wikilivros</span></a></li></ul> </div> <ul><li><a rel="nofollow" class="external text" href="https://cdn.knightlab.com/libs/timeline3/latest/embed/index.html?source=1je3q1Htz-eLkwayEmHgtxJ6hnH2E3-Uo7i11_rNEhAw&font=Default&lang=en&initial_zoom=2&height=650">Timeline histórica da linguagem e de versões da implementação SWI-Prolog</a></li> <li><a rel="nofollow" class="external text" href="http://www.augustobaffa.pro.br/wiki/Prolog_Tutorial">Tutorial sobre programação em Prolog e exemplos</a></li></ul> <div role="navigation" class="navbox" aria-labelledby="Linguagens_de_programação" style="padding:3px"><table class="nowraplinks hlist collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div class="plainlinks hlist navbar mini"><ul><li class="nv-ver"><a href="/wiki/Predefini%C3%A7%C3%A3o:Linguagens_de_programa%C3%A7%C3%A3o" title="Predefinição:Linguagens de programação"><abbr title="Ver esta predefinição" style=";;background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none; padding:0;">v</abbr></a></li><li class="nv-discutir"><a href="/wiki/Predefini%C3%A7%C3%A3o_Discuss%C3%A3o:Linguagens_de_programa%C3%A7%C3%A3o" title="Predefinição Discussão:Linguagens de programação"><abbr title="Discutir esta predefinição" style=";;background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none; padding:0;">d</abbr></a></li><li class="nv-editar"><a class="external text" href="https://pt.wikipedia.org/w/index.php?title=Predefini%C3%A7%C3%A3o:Linguagens_de_programa%C3%A7%C3%A3o&action=edit"><abbr title="Editar esta predefinição" style=";;background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none; padding:0;">e</abbr></a></li></ul></div><div id="Linguagens_de_programação" style="font-size:114%;margin:0 4em"><a href="/wiki/Linguagem_de_programa%C3%A7%C3%A3o" title="Linguagem de programação">Linguagens de programação</a></div></th></tr><tr><td class="navbox-abovebelow" colspan="2"><div id="Esotéricas_·_Comparação_·_História_·_Turing_completude_·_Programa_Olá_Mundo_·_Algoritmo_TPK_·_Quine"><a href="/wiki/Linguagem_de_programa%C3%A7%C3%A3o_esot%C3%A9rica" title="Linguagem de programação esotérica">Esotéricas</a> <b>·</b>  <a href="/wiki/Compara%C3%A7%C3%A3o_entre_linguagens_de_programa%C3%A7%C3%A3o" title="Comparação entre linguagens de programação">Comparação</a> <b>·</b>  <a href="/wiki/Hist%C3%B3ria_das_linguagens_de_programa%C3%A7%C3%A3o" title="História das linguagens de programação">História</a> <b>·</b>  <a href="/wiki/Turing_completude" title="Turing completude">Turing completude</a> <b>·</b>  <a href="/wiki/Programa_Ol%C3%A1_Mundo" title="Programa Olá Mundo">Programa Olá Mundo</a> <b>·</b>  <a href="/wiki/Algoritmo_de_Trabb_Pardo-Knuth" title="Algoritmo de Trabb Pardo-Knuth">Algoritmo TPK</a> <b>·</b>  <a href="/wiki/Quine_(inform%C3%A1tica)" title="Quine (informática)">Quine</a></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0px"><div style="padding:0em 0.25em"> <ul><li><a href="/wiki/Ada_(linguagem_de_programa%C3%A7%C3%A3o)" title="Ada (linguagem de programação)">Ada</a></li> <li><a href="/wiki/Linguagem_assembly" title="Linguagem assembly">Assembly</a></li> <li><a href="/wiki/BASIC" title="BASIC">BASIC</a></li> <li><a href="/wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)" title="C (linguagem de programação)">C</a></li> <li><a href="/wiki/C%2B%2B" title="C++">C++</a></li> <li><a href="/wiki/C_Sharp" title="C Sharp">C#</a></li> <li><a href="/wiki/COBOL" title="COBOL">COBOL</a></li> <li><a href="/wiki/Dart_(linguagem_de_programa%C3%A7%C3%A3o)" title="Dart (linguagem de programação)">Dart</a></li> <li><a href="/wiki/Elixir_(linguagem_de_programa%C3%A7%C3%A3o)" title="Elixir (linguagem de programação)">Elixir</a></li> <li><a href="/wiki/Erlang_(linguagem_de_programa%C3%A7%C3%A3o)" title="Erlang (linguagem de programação)">Erlang</a></li> <li><a href="/wiki/Fortran" title="Fortran">Fortran</a></li> <li><a href="/wiki/Go_(linguagem_de_programa%C3%A7%C3%A3o)" title="Go (linguagem de programação)">Go</a></li> <li><a href="/wiki/Haskell_(linguagem_de_programa%C3%A7%C3%A3o)" title="Haskell (linguagem de programação)">Haskell</a></li> <li><a href="/wiki/Java_(linguagem_de_programa%C3%A7%C3%A3o)" title="Java (linguagem de programação)">Java</a></li> <li><a href="/wiki/JavaScript" title="JavaScript">JavaScript</a></li> <li><a href="/wiki/Julia_(linguagem_de_programa%C3%A7%C3%A3o)" title="Julia (linguagem de programação)">Julia</a></li> <li><a href="/wiki/Kotlin" title="Kotlin">Kotlin</a></li> <li><a href="/wiki/Lisp" title="Lisp">Lisp</a></li> <li><a href="/wiki/Lua_(linguagem_de_programa%C3%A7%C3%A3o)" title="Lua (linguagem de programação)">Lua</a></li> <li><a href="/wiki/ML_(linguagem_de_programa%C3%A7%C3%A3o)" title="ML (linguagem de programação)">ML</a></li> <li><a href="/wiki/Pascal_(linguagem_de_programa%C3%A7%C3%A3o)" title="Pascal (linguagem de programação)">Pascal</a></li> <li><a href="/wiki/Perl" title="Perl">Perl</a></li> <li><a href="/wiki/PHP" title="PHP">PHP</a></li> <li><a href="/wiki/Python" title="Python">Python</a></li> <li><a href="/wiki/R_(linguagem_de_programa%C3%A7%C3%A3o)" title="R (linguagem de programação)">R</a></li> <li><a href="/wiki/Ruby_(linguagem_de_programa%C3%A7%C3%A3o)" title="Ruby (linguagem de programação)">Ruby</a></li> <li><a href="/wiki/Rust_(linguagem_de_programa%C3%A7%C3%A3o)" title="Rust (linguagem de programação)">Rust</a></li> <li><a href="/wiki/Scala_(linguagem_de_programa%C3%A7%C3%A3o)" title="Scala (linguagem de programação)">Scala</a></li> <li><a href="/wiki/Shell_script" title="Shell script">Shell</a></li> <li><a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a></li> <li><a href="/wiki/SQL" title="SQL">SQL</a></li> <li><a href="/wiki/Swift_(linguagem_de_programa%C3%A7%C3%A3o)" title="Swift (linguagem de programação)">Swift</a></li> <li><i><a href="/wiki/Lista_de_linguagens_de_programa%C3%A7%C3%A3o" title="Lista de linguagens de programação">mais...</a></i></li></ul> </div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div><span typeof="mw:File"><span title="Página de categoria"><img alt="Página de categoria" src="//upload.wikimedia.org/wikipedia/commons/thumb/9/96/Symbol_category_class.svg/16px-Symbol_category_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/9/96/Symbol_category_class.svg/24px-Symbol_category_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/96/Symbol_category_class.svg/32px-Symbol_category_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <a href="/wiki/Categoria:Linguagens_de_programa%C3%A7%C3%A3o" title="Categoria:Linguagens de programação">Categoria</a> <b>·</b>  <span typeof="mw:File"><span title="Lista"><img alt="Lista" src="//upload.wikimedia.org/wikipedia/commons/thumb/d/db/Symbol_list_class.svg/16px-Symbol_list_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/d/db/Symbol_list_class.svg/24px-Symbol_list_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/db/Symbol_list_class.svg/32px-Symbol_list_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <a href="/wiki/Lista_de_linguagens_de_programa%C3%A7%C3%A3o" title="Lista de linguagens de programação">Lista</a></div></td></tr></tbody></table></div> <div role="navigation" class="navbox" aria-labelledby="Padrões_ISO" style="padding:3px"><table class="nowraplinks collapsible collapsed navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div class="plainlinks hlist navbar mini"><ul><li class="nv-ver"><a href="/wiki/Predefini%C3%A7%C3%A3o:Normas_ISO" title="Predefinição:Normas ISO"><abbr title="Ver esta predefinição" style=";;background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none; padding:0;">v</abbr></a></li><li class="nv-discutir"><a href="/w/index.php?title=Predefini%C3%A7%C3%A3o_Discuss%C3%A3o:Normas_ISO&action=edit&redlink=1" class="new" title="Predefinição Discussão:Normas ISO (página não existe)"><abbr title="Discutir esta predefinição" style=";;background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none; padding:0;">d</abbr></a></li><li class="nv-editar"><a class="external text" href="https://pt.wikipedia.org/w/index.php?title=Predefini%C3%A7%C3%A3o:Normas_ISO&action=edit"><abbr title="Editar esta predefinição" style=";;background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none; padding:0;">e</abbr></a></li></ul></div><div id="Padrões_ISO" style="font-size:114%;margin:0 4em">Padrões <a href="/wiki/Organiza%C3%A7%C3%A3o_Internacional_para_Padroniza%C3%A7%C3%A3o" class="mw-redirect" title="Organização Internacional para Padronização">ISO</a></div></th></tr><tr><td class="navbox-abovebelow" colspan="2"><div id="Listas:_Lista_de_romanizações_ISO_·_Lista_de_normas_IECCategorias:_Categoria:Normas_ISO_·_Categoria:Protocolos_OSI"><i><u>Listas:</u></i> <a href="/wiki/Lista_de_romaniza%C3%A7%C3%B5es_ISO" title="Lista de romanizações ISO">Lista de romanizações ISO</a> <b>·</b>  <a href="/wiki/Lista_de_normas_IEC" title="Lista de normas IEC">Lista de normas IEC</a><br /><i><u>Categorias:</u></i> <a href="/wiki/Categoria:Normas_ISO" title="Categoria:Normas ISO">Categoria:Normas ISO</a> <b>·</b>  <a href="/wiki/Categoria:Protocolos_OSI" title="Categoria:Protocolos OSI">Categoria:Protocolos OSI</a></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">1-9k</th><td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"><a href="/wiki/ISO_1" title="ISO 1">1</a> <b>·</b>  <a href="/w/index.php?title=ISO_2&action=edit&redlink=1" class="new" title="ISO 2 (página não existe)">2</a> <b>·</b>  <a href="/w/index.php?title=ISO_3&action=edit&redlink=1" class="new" title="ISO 3 (página não existe)">3</a> <b>·</b>  <a href="/wiki/ISO_4" title="ISO 4">4</a> <b>·</b>  <a href="/wiki/ISO_9" title="ISO 9">9</a> <b>·</b>  <a href="/wiki/ISO_31" title="ISO 31">31</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-0&action=edit&redlink=1" class="new" title="ISO 31-0 (página não existe)">31-0</a> <b>·</b>  <a href="/wiki/ISO_31-1" title="ISO 31-1">31-1</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-2&action=edit&redlink=1" class="new" title="ISO 31-2 (página não existe)">31-2</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-3&action=edit&redlink=1" class="new" title="ISO 31-3 (página não existe)">31-3</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-4&action=edit&redlink=1" class="new" title="ISO 31-4 (página não existe)">31-4</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-5&action=edit&redlink=1" class="new" title="ISO 31-5 (página não existe)">31-5</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-6&action=edit&redlink=1" class="new" title="ISO 31-6 (página não existe)">31-6</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-7&action=edit&redlink=1" class="new" title="ISO 31-7 (página não existe)">31-7</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-8&action=edit&redlink=1" class="new" title="ISO 31-8 (página não existe)">31-8</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-9&action=edit&redlink=1" class="new" title="ISO 31-9 (página não existe)">31-9</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-10&action=edit&redlink=1" class="new" title="ISO 31-10 (página não existe)">31-10</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-11&action=edit&redlink=1" class="new" title="ISO 31-11 (página não existe)">31-11</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-12&action=edit&redlink=1" class="new" title="ISO 31-12 (página não existe)">31-12</a> <b>·</b>  <a href="/w/index.php?title=ISO_31-13&action=edit&redlink=1" class="new" title="ISO 31-13 (página não existe)">31-13</a> <b>·</b>  <a href="/wiki/ISO_128" title="ISO 128">128</a> <b>·</b>  <a href="/wiki/ISO_216" title="ISO 216">216</a> <b>·</b>  <a href="/w/index.php?title=ISO_217&action=edit&redlink=1" class="new" title="ISO 217 (página não existe)">217</a> <b>·</b>  <a href="/w/index.php?title=Equal-loudness_contour&action=edit&redlink=1" class="new" title="Equal-loudness contour (página não existe)">226</a> <b>·</b>  <a href="/w/index.php?title=British_standard_pipe_thread&action=edit&redlink=1" class="new" title="British standard pipe thread (página não existe)">228</a> <b>·</b>  <a href="/w/index.php?title=ISO_233&action=edit&redlink=1" class="new" title="ISO 233 (página não existe)">233</a> <b>·</b>  <a href="/w/index.php?title=ISO_259&action=edit&redlink=1" class="new" title="ISO 259 (página não existe)">259</a> <b>·</b>  <a href="/wiki/ISO_269" title="ISO 269">269</a> <b>·</b>  <a href="/w/index.php?title=ISO_302&action=edit&redlink=1" class="new" title="ISO 302 (página não existe)">302</a> <b>·</b>  <a href="/w/index.php?title=ISO_306&action=edit&redlink=1" class="new" title="ISO 306 (página não existe)">306</a> <b>·</b>  <a href="/w/index.php?title=ISO_428&action=edit&redlink=1" class="new" title="ISO 428 (página não existe)">428</a> <b>·</b>  <a href="/wiki/ISO_639" title="ISO 639">639</a> <b>·</b>  <a href="/wiki/ISO_639-1" class="mw-redirect" title="ISO 639-1">639-1</a> <b>·</b>  <a href="/wiki/ISO_639-2" class="mw-redirect" title="ISO 639-2">639-2</a> <b>·</b>  <a href="/wiki/ISO_639-3" class="mw-redirect" title="ISO 639-3">639-3</a> <b>·</b>  <a href="/w/index.php?title=ISO_639-5&action=edit&redlink=1" class="new" title="ISO 639-5 (página não existe)">639-5</a> <b>·</b>  <a href="/w/index.php?title=ISO_639-6&action=edit&redlink=1" class="new" title="ISO 639-6 (página não existe)">639-6</a> <b>·</b>  <a href="/wiki/ISO_646" class="mw-redirect" title="ISO 646">646</a> <b>·</b>  <a href="/w/index.php?title=ISO_690&action=edit&redlink=1" class="new" title="ISO 690 (página não existe)">690</a> <b>·</b>  <a href="/w/index.php?title=ISO_732&action=edit&redlink=1" class="new" title="ISO 732 (página não existe)">732</a> <b>·</b>  <a href="/w/index.php?title=ISO_764&action=edit&redlink=1" class="new" title="ISO 764 (página não existe)">746</a> <b>·</b>  <a href="/w/index.php?title=ISO_843&action=edit&redlink=1" class="new" title="ISO 843 (página não existe)">843</a> <b>·</b>  <a href="/wiki/ISO_1000" title="ISO 1000">1000</a> <b>·</b>  <a href="/w/index.php?title=135_film&action=edit&redlink=1" class="new" title="135 film (página não existe)">1007</a> <b>·</b>  <a href="/w/index.php?title=ISO_1073-1&action=edit&redlink=1" class="new" title="ISO 1073-1 (página não existe)">1073-1</a> <b>·</b>  <a href="/w/index.php?title=ISO_1413&action=edit&redlink=1" class="new" title="ISO 1413 (página não existe)">1413</a> <b>·</b>  <a href="/wiki/ISO_1745:1975" title="ISO 1745:1975">1745</a> <b>·</b>  <a href="/w/index.php?title=ISO_2014&action=edit&redlink=1" class="new" title="ISO 2014 (página não existe)">2014</a> <b>·</b>  <a href="/w/index.php?title=ISO_2015&action=edit&redlink=1" class="new" title="ISO 2015 (página não existe)">2015</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_2022&action=edit&redlink=1" class="new" title="ISO/IEC 2022 (página não existe)">2022</a> <b>·</b>  <a href="/wiki/ISO_2108" class="mw-redirect" title="ISO 2108">2108</a> <b>·</b>  <a href="/w/index.php?title=ISO_2145&action=edit&redlink=1" class="new" title="ISO 2145 (página não existe)">2145</a> <b>·</b>  <a href="/w/index.php?title=ISO_2281&action=edit&redlink=1" class="new" title="ISO 2281 (página não existe)">2281</a> <b>·</b>  <a href="/w/index.php?title=ISO_2709&action=edit&redlink=1" class="new" title="ISO 2709 (página não existe)">2709</a> <b>·</b>  <a href="/w/index.php?title=ISO_2711&action=edit&redlink=1" class="new" title="ISO 2711 (página não existe)">2711</a> <b>·</b>  <a href="/w/index.php?title=ISO_2788&action=edit&redlink=1" class="new" title="ISO 2788 (página não existe)">2788</a> <b>·</b>  <a href="/w/index.php?title=ISO_3029&action=edit&redlink=1" class="new" title="ISO 3029 (página não existe)">3029</a> <b>·</b>  <a href="/wiki/ISO_3103" title="ISO 3103">3103</a> <b>·</b>  <a href="/wiki/ISO_3166" title="ISO 3166">3166</a> <b>·</b>  <a href="/wiki/ISO_3166-1" title="ISO 3166-1">3166-1</a> <b>·</b>  <a href="/wiki/ISO_3166-2" title="ISO 3166-2">3166-2</a> <b>·</b>  <a href="/wiki/ISO_3166-3" title="ISO 3166-3">3166-3</a> <b>·</b>  <a href="/w/index.php?title=ISO_3307&action=edit&redlink=1" class="new" title="ISO 3307 (página não existe)">3307</a> <b>·</b>  <a href="/w/index.php?title=ISO_3602&action=edit&redlink=1" class="new" title="ISO 3602 (página não existe)">3602</a> <b>·</b>  <a href="/w/index.php?title=ISO_3864&action=edit&redlink=1" class="new" title="ISO 3864 (página não existe)">3864</a> <b>·</b>  <a href="/w/index.php?title=ISO_3901&action=edit&redlink=1" class="new" title="ISO 3901 (página não existe)">3901</a> <b>·</b>  <a href="/w/index.php?title=ISO_3977&action=edit&redlink=1" class="new" title="ISO 3977 (página não existe)">3977</a> <b>·</b>  <a href="/w/index.php?title=ISO_4031&action=edit&redlink=1" class="new" title="ISO 4031 (página não existe)">4031</a> <b>·</b>  <a href="/w/index.php?title=ISO_4157&action=edit&redlink=1" class="new" title="ISO 4157 (página não existe)">4157</a> <b>·</b>  <a href="/wiki/ISO_4217" title="ISO 4217">4217</a> <b>·</b>  <a href="/wiki/ISO_5218" class="mw-redirect" title="ISO 5218">5218</a> <b>·</b>  <a href="/w/index.php?title=ISO_5775&action=edit&redlink=1" class="new" title="ISO 5775 (página não existe)">5775</a> <b>·</b>  <a href="/w/index.php?title=ISO_5776&action=edit&redlink=1" class="new" title="ISO 5776 (página não existe)">5776</a> <b>·</b>  <a href="/w/index.php?title=ISO_5964&action=edit&redlink=1" class="new" title="ISO 5964 (página não existe)">5964</a> <b>·</b>  <a href="/w/index.php?title=ISO_6166&action=edit&redlink=1" class="new" title="ISO 6166 (página não existe)">6166</a> <b>·</b>  <a href="/w/index.php?title=ISO_6344&action=edit&redlink=1" class="new" title="ISO 6344 (página não existe)">6344</a> <b>·</b>  <a href="/w/index.php?title=ISO_6346&action=edit&redlink=1" class="new" title="ISO 6346 (página não existe)">6346</a> <b>·</b>  <a href="/w/index.php?title=ISO_6425&action=edit&redlink=1" class="new" title="ISO 6425 (página não existe)">6425</a> <b>·</b>  <a href="/w/index.php?title=ANSI_escape_code&action=edit&redlink=1" class="new" title="ANSI escape code (página não existe)">6429</a> <b>·</b>  <a href="/w/index.php?title=ISO_6438&action=edit&redlink=1" class="new" title="ISO 6438 (página não existe)">6438</a> <b>·</b>  <a href="/w/index.php?title=ISO_6523&action=edit&redlink=1" class="new" title="ISO 6523 (página não existe)">6523</a> <b>·</b>  <a href="/wiki/ISO_6709" title="ISO 6709">6709</a> <b>·</b>  <a href="/w/index.php?title=ISO_7001&action=edit&redlink=1" class="new" title="ISO 7001 (página não existe)">7001</a> <b>·</b>  <a href="/w/index.php?title=ISO_7002&action=edit&redlink=1" class="new" title="ISO 7002 (página não existe)">7002</a> <b>·</b>  <a href="/wiki/Pinyin" title="Pinyin">7098</a> <b>·</b>  <a href="/wiki/Pascal_(linguagem_de_programa%C3%A7%C3%A3o)" title="Pascal (linguagem de programação)">7185</a> <b>·</b>  <a href="/w/index.php?title=OSI_model&action=edit&redlink=1" class="new" title="OSI model (página não existe)">7498</a> <b>·</b>  <a href="/w/index.php?title=ISO_7736&action=edit&redlink=1" class="new" title="ISO 7736 (página não existe)">7736</a> <b>·</b>  <a href="/wiki/ISO/IEC_7810" title="ISO/IEC 7810">7810</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_7811&action=edit&redlink=1" class="new" title="ISO/IEC 7811 (página não existe)">7811</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_7812&action=edit&redlink=1" class="new" title="ISO/IEC 7812 (página não existe)">7812</a> <b>·</b>  <a href="/wiki/ISO/IEC_7813" title="ISO/IEC 7813">7813</a> <b>·</b>  <a href="/wiki/ISO/IEC_7816" title="ISO/IEC 7816">7816</a> <b>·</b>  <a href="/w/index.php?title=Fuel_oil&action=edit&redlink=1" class="new" title="Fuel oil (página não existe)">8217</a> <b>·</b>  <a href="/w/index.php?title=ISO_8571&action=edit&redlink=1" class="new" title="ISO 8571 (página não existe)">8571</a> <b>·</b>  <a href="/wiki/ISO_8583" title="ISO 8583">8583</a> <b>·</b>  <a href="/wiki/ISO_8601" title="ISO 8601">8601</a> <b>·</b>  <a href="/w/index.php?title=Computer_Graphics_Metafile&action=edit&redlink=1" class="new" title="Computer Graphics Metafile (página não existe)">8632</a> <b>·</b>  <a href="/w/index.php?title=ISO_8652&action=edit&redlink=1" class="new" title="ISO 8652 (página não existe)">8652</a> <b>·</b>  <a href="/w/index.php?title=ISO_8807&action=edit&redlink=1" class="new" title="ISO 8807 (página não existe)">8807</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_8820-5&action=edit&redlink=1" class="new" title="ISO/IEC 8820-5 (página não existe)">8820-5</a> <b>·</b>  <a href="/wiki/ISO/IEC_8859" title="ISO/IEC 8859">8859</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_8859-8&action=edit&redlink=1" class="new" title="ISO/IEC 8859-8 (página não existe)">8859-8</a> <b>·</b>  <a href="/wiki/ISO_9000" title="ISO 9000">9000</a> <b>·</b>  <a href="/wiki/SQL" title="SQL">9075</a> <b>·</b>  <a href="/wiki/ISO_9126" class="mw-redirect" title="ISO 9126">9126</a> <b>·</b>  <a href="/w/index.php?title=ISO_9241&action=edit&redlink=1" class="new" title="ISO 9241 (página não existe)">9241</a> <b>·</b>  <a href="/w/index.php?title=ISO_9362&action=edit&redlink=1" class="new" title="ISO 9362 (página não existe)">9362</a> <b>·</b>  <a href="/w/index.php?title=Shoe_size&action=edit&redlink=1" class="new" title="Shoe size (página não existe)">9407</a> <b>·</b>  <a href="/w/index.php?title=ISO_9506&action=edit&redlink=1" class="new" title="ISO 9506 (página não existe)">9506</a> <b>·</b>  <a href="/w/index.php?title=ISO_9529&action=edit&redlink=1" class="new" title="ISO 9529 (página não existe)">9529</a> <b>·</b>  <a href="/wiki/X.500" title="X.500">9594</a> <b>·</b>  <a href="/wiki/ISO_9660" title="ISO 9660">9660</a> <b>·</b>  <a href="/w/index.php?title=ISO_9897&action=edit&redlink=1" class="new" title="ISO 9897 (página não existe)">9897</a> <b>·</b>  <a href="/wiki/POSIX" title="POSIX">9945</a> <b>·</b>  <a href="/w/index.php?title=ISO_9984&action=edit&redlink=1" class="new" title="ISO 9984 (página não existe)">9984</a> <b>·</b>  <a href="/w/index.php?title=ISO_9985&action=edit&redlink=1" class="new" title="ISO 9985 (página não existe)">9985</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_9995&action=edit&redlink=1" class="new" title="ISO/IEC 9995 (página não existe)">9995</a></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">10k-</th><td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px"><div style="padding:0em 0.25em"><a href="/wiki/ISO_10006" title="ISO 10006">10006</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_10118-3&action=edit&redlink=1" class="new" title="ISO/IEC 10118-3 (página não existe)">10118-3</a> <b>·</b>  <a href="/w/index.php?title=ISO_10160&action=edit&redlink=1" class="new" title="ISO 10160 (página não existe)">10160</a> <b>·</b>  <a href="/w/index.php?title=ISO_10161&action=edit&redlink=1" class="new" title="ISO 10161 (página não existe)">10161</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_10165&action=edit&redlink=1" class="new" title="ISO/IEC 10165 (página não existe)">10165</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_10179&action=edit&redlink=1" class="new" title="ISO/IEC 10179 (página não existe)">10179</a> <b>·</b>  <a href="/w/index.php?title=ISO_10206&action=edit&redlink=1" class="new" title="ISO 10206 (página não existe)">10206</a> <b>·</b>  <a href="/wiki/STEP" title="STEP">10303</a> <b>·</b>  <a href="/w/index.php?title=EXPRESS_(data_modeling_language)&action=edit&redlink=1" class="new" title="EXPRESS (data modeling language) (página não existe)">10303-11</a> <b>·</b>  <a href="/w/index.php?title=ISO_10303-21&action=edit&redlink=1" class="new" title="ISO 10303-21 (página não existe)">10303-21</a> <b>·</b>  <a href="/w/index.php?title=ISO_10303-22&action=edit&redlink=1" class="new" title="ISO 10303-22 (página não existe)">10303-22</a> <b>·</b>  <a href="/w/index.php?title=STEP-NC&action=edit&redlink=1" class="new" title="STEP-NC (página não existe)">10303-238</a> <b>·</b>  <a href="/w/index.php?title=ISO_10303-28&action=edit&redlink=1" class="new" title="ISO 10303-28 (página não existe)">10303-28</a> <b>·</b>  <a href="/w/index.php?title=ISO_10383&action=edit&redlink=1" class="new" title="ISO 10383 (página não existe)">10383</a> <b>·</b>  <a href="/w/index.php?title=ISO_10487&action=edit&redlink=1" class="new" title="ISO 10487 (página não existe)">10487</a> <b>·</b>  <a href="/w/index.php?title=ISO_10585&action=edit&redlink=1" class="new" title="ISO 10585 (página não existe)">10585</a> <b>·</b>  <a href="/w/index.php?title=ISO_10589&action=edit&redlink=1" class="new" title="ISO 10589 (página não existe)">10589</a> <b>·</b>  <a href="/w/index.php?title=ISO_10646&action=edit&redlink=1" class="new" title="ISO 10646 (página não existe)">10646</a> <b>·</b>  <a href="/w/index.php?title=ISO_10664&action=edit&redlink=1" class="new" title="ISO 10664 (página não existe)">10664</a> <b>·</b>  <a href="/w/index.php?title=ISO_10746&action=edit&redlink=1" class="new" title="ISO 10746 (página não existe)">10746</a> <b>·</b>  <a href="/w/index.php?title=ISO_10962&action=edit&redlink=1" class="new" title="ISO 10962 (página não existe)">10962</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_10967&action=edit&redlink=1" class="new" title="ISO/IEC 10967 (página não existe)">10967</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEEE_11073&action=edit&redlink=1" class="new" title="ISO/IEEE 11073 (página não existe)">11073</a> <b>·</b>  <a href="/w/index.php?title=ISO_11170&action=edit&redlink=1" class="new" title="ISO 11170 (página não existe)">11170</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_11179&action=edit&redlink=1" class="new" title="ISO/IEC 11179 (página não existe)">11179</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_11404&action=edit&redlink=1" class="new" title="ISO/IEC 11404 (página não existe)">11404</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_11544&action=edit&redlink=1" class="new" title="ISO/IEC 11544 (página não existe)">11544</a> <b>·</b>  <a href="/w/index.php?title=ISO_11783&action=edit&redlink=1" class="new" title="ISO 11783 (página não existe)">11783</a> <b>·</b>  <a href="/w/index.php?title=ISO_11784_%26_11785&action=edit&redlink=1" class="new" title="ISO 11784 & 11785 (página não existe)">11784</a> <b>·</b>  <a href="/w/index.php?title=ISO_11784_%26_11785&action=edit&redlink=1" class="new" title="ISO 11784 & 11785 (página não existe)">11785</a> <b>·</b>  <a href="/wiki/ISO/IEC_11801" title="ISO/IEC 11801">11801</a> <b>·</b>  <a href="/w/index.php?title=ISO_11898&action=edit&redlink=1" class="new" title="ISO 11898 (página não existe)">11898</a> <b>·</b>  <a href="/w/index.php?title=ISO_11940&action=edit&redlink=1" class="new" title="ISO 11940 (página não existe)">11940</a> <b>·</b>  <a href="/w/index.php?title=ISO_11941&action=edit&redlink=1" class="new" title="ISO 11941 (página não existe)">11941</a> <b>·</b>  <a href="/w/index.php?title=ISO/TR_11941&action=edit&redlink=1" class="new" title="ISO/TR 11941 (página não existe)">11941</a> <b>·</b>  <a href="/w/index.php?title=ISO_11992&action=edit&redlink=1" class="new" title="ISO 11992 (página não existe)">11992</a> <b>·</b>  <a href="/w/index.php?title=ISO_12006&action=edit&redlink=1" class="new" title="ISO 12006 (página não existe)">12006</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_TR_12182:1998&action=edit&redlink=1" class="new" title="ISO/IEC TR 12182:1998 (página não existe)">12182:1998</a> <b>·</b>  <a href="/wiki/ISO_12207" class="mw-redirect" title="ISO 12207">12207</a> <b>·</b>  <a href="/w/index.php?title=ISO_12234-2&action=edit&redlink=1" class="new" title="ISO 12234-2 (página não existe)">12234-2</a> <b>·</b>  <a class="mw-selflink selflink">13211-1</a> <b>·</b>  <a href="/w/index.php?title=ISO_13216&action=edit&redlink=1" class="new" title="ISO 13216 (página não existe)">13216</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_13250&action=edit&redlink=1" class="new" title="ISO/IEC 13250 (página não existe)">13250</a> <b>·</b>  <a href="/w/index.php?title=ISO_13399&action=edit&redlink=1" class="new" title="ISO 13399 (página não existe)">13399</a> <b>·</b>  <a href="/w/index.php?title=ISO_13406-2&action=edit&redlink=1" class="new" title="ISO 13406-2 (página não existe)">13406-2</a> <b>·</b>  <a href="/w/index.php?title=ISO13407&action=edit&redlink=1" class="new" title="ISO13407 (página não existe)">13407</a> <b>·</b>  <a href="/w/index.php?title=110_film&action=edit&redlink=1" class="new" title="110 film (página não existe)">13450</a> <b>·</b>  <a href="/w/index.php?title=ISO_13485&action=edit&redlink=1" class="new" title="ISO 13485 (página não existe)">13485</a> <b>·</b>  <a href="/wiki/ISO_13490" title="ISO 13490">13490</a> <b>·</b>  <a href="/w/index.php?title=ISO_13567&action=edit&redlink=1" class="new" title="ISO 13567 (página não existe)">13567</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_13568&action=edit&redlink=1" class="new" title="ISO/IEC 13568 (página não existe)">13568</a> <b>·</b>  <a href="/w/index.php?title=ISO_13584&action=edit&redlink=1" class="new" title="ISO 13584 (página não existe)">13584</a> <b>·</b>  <a href="/w/index.php?title=ISO_13616&action=edit&redlink=1" class="new" title="ISO 13616 (página não existe)">13616</a> <b>·</b>  <a href="/wiki/ISO_14000" title="ISO 14000">14000</a> <b>·</b>  <a href="/w/index.php?title=ISO_14031&action=edit&redlink=1" class="new" title="ISO 14031 (página não existe)">14031</a> <b>·</b>  <a href="/wiki/Cavalo-vapor" class="mw-redirect" title="Cavalo-vapor">14396</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_14443&action=edit&redlink=1" class="new" title="ISO/IEC 14443 (página não existe)">14443</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_14496-10&action=edit&redlink=1" class="new" title="ISO/IEC 14496-10 (página não existe)">14496-10</a> <b>·</b>  <a href="/w/index.php?title=MPEG-4_Part_14&action=edit&redlink=1" class="new" title="MPEG-4 Part 14 (página não existe)">14496-14</a> <b>·</b>  <a href="/w/index.php?title=ISO_14644&action=edit&redlink=1" class="new" title="ISO 14644 (página não existe)">14644</a> <b>·</b>  <a href="/w/index.php?title=ISO_14644-1&action=edit&redlink=1" class="new" title="ISO 14644-1 (página não existe)">14644-1</a> <b>·</b>  <a href="/w/index.php?title=ISO_14644-2&action=edit&redlink=1" class="new" title="ISO 14644-2 (página não existe)">14644-2</a> <b>·</b>  <a href="/w/index.php?title=ISO_14644-3&action=edit&redlink=1" class="new" title="ISO 14644-3 (página não existe)">14644-3</a> <b>·</b>  <a href="/w/index.php?title=ISO_14644-4&action=edit&redlink=1" class="new" title="ISO 14644-4 (página não existe)">14644-4</a> <b>·</b>  <a href="/w/index.php?title=ISO_14644-5&action=edit&redlink=1" class="new" title="ISO 14644-5 (página não existe)">14644-5</a> <b>·</b>  <a href="/w/index.php?title=ISO_14644-6&action=edit&redlink=1" class="new" title="ISO 14644-6 (página não existe)">14644-6</a> <b>·</b>  <a href="/w/index.php?title=ISO_14644-7&action=edit&redlink=1" class="new" title="ISO 14644-7 (página não existe)">14644-7</a> <b>·</b>  <a href="/w/index.php?title=ISO_14644-8&action=edit&redlink=1" class="new" title="ISO 14644-8 (página não existe)">14644-8</a> <b>·</b>  <a href="/w/index.php?title=ISO_14644-9&action=edit&redlink=1" class="new" title="ISO 14644-9 (página não existe)">14644-9</a> <b>·</b>  <a href="/w/index.php?title=ISO_14649&action=edit&redlink=1" class="new" title="ISO 14649 (página não existe)">14649</a> <b>·</b>  <a href="/w/index.php?title=ISO_14651&action=edit&redlink=1" class="new" title="ISO 14651 (página não existe)">14651</a> <b>·</b>  <a href="/w/index.php?title=ISO_14698&action=edit&redlink=1" class="new" title="ISO 14698 (página não existe)">14698</a> <b>·</b>  <a href="/w/index.php?title=ISO_14698-2&action=edit&redlink=1" class="new" title="ISO 14698-2 (página não existe)">14698-2</a> <b>·</b>  <a href="/w/index.php?title=ISO_14750&action=edit&redlink=1" class="new" title="ISO 14750 (página não existe)">14750</a> <b>·</b>  <a href="/wiki/C%2B%2B" title="C++">14882</a> <b>·</b>  <a href="/wiki/ISO_14971" title="ISO 14971">14971</a> <b>·</b> <a href="/w/index.php?title=ISO_15022&action=edit&redlink=1" class="new" title="ISO 15022 (página não existe)">15022</a> <b>·</b>  <a href="/w/index.php?title=ISO_15189&action=edit&redlink=1" class="new" title="ISO 15189 (página não existe)">15189</a> <b>·</b>  <a href="/w/index.php?title=ISO_15288&action=edit&redlink=1" class="new" title="ISO 15288 (página não existe)">15288</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_15291&action=edit&redlink=1" class="new" title="ISO/IEC 15291 (página não existe)">15291</a> <b>·</b>  <a href="/w/index.php?title=ISO_15292&action=edit&redlink=1" class="new" title="ISO 15292 (página não existe)">15292</a> <b>·</b>  <a href="/wiki/Common_Criteria" title="Common Criteria">15408</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_15444&action=edit&redlink=1" class="new" title="ISO/IEC 15444 (página não existe)">15444</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_15445&action=edit&redlink=1" class="new" title="ISO/IEC 15445 (página não existe)">15445</a> <b>·</b>  <a href="/w/index.php?title=PDF417&action=edit&redlink=1" class="new" title="PDF417 (página não existe)">15438</a> <b>·</b>  <a href="/wiki/ISO_15504" class="mw-redirect" title="ISO 15504">15504</a> <b>·</b>  <a href="/w/index.php?title=ISO_15686&action=edit&redlink=1" class="new" title="ISO 15686 (página não existe)">15686</a> <b>·</b>  <a href="/w/index.php?title=ISO_15693&action=edit&redlink=1" class="new" title="ISO 15693 (página não existe)">15693</a> <b>·</b> <a href="/wiki/International_Standard_Audiovisual_Number" title="International Standard Audiovisual Number">15706</a> <b>·</b> <a href="/w/index.php?title=ISO_15706-2&action=edit&redlink=1" class="new" title="ISO 15706-2 (página não existe)">15706-2</a> <b>·</b>  <a href="/w/index.php?title=ISO_15897&action=edit&redlink=1" class="new" title="ISO 15897 (página não existe)">15897</a> <b>·</b>  <a href="/wiki/ISO_15919" title="ISO 15919">15919</a> <b>·</b>  <a href="/wiki/ISO_15924" title="ISO 15924">15924</a> <b>·</b>  <a href="/wiki/ISO_15926" title="ISO 15926">15926</a> <b>·</b>  <a href="/w/index.php?title=ISO_15926_WIP&action=edit&redlink=1" class="new" title="ISO 15926 WIP (página não existe)">15926 WIP</a> <b>·</b>  <a href="/w/index.php?title=ISO_15930&action=edit&redlink=1" class="new" title="ISO 15930 (página não existe)">15930</a> <b>·</b>  <a href="/w/index.php?title=MaxiCode&action=edit&redlink=1" class="new" title="MaxiCode (página não existe)">16023</a> <b>·</b>  <a href="/wiki/ECMAScript" title="ECMAScript">16262</a> <b>·</b>  <a href="/w/index.php?title=ISO_16750&action=edit&redlink=1" class="new" title="ISO 16750 (página não existe)">16750</a> <b>·</b>  <a href="/wiki/ISO/IEC_17024" title="ISO/IEC 17024">17024</a> <b>·</b>  <a href="/wiki/ISO/IEC_17025" title="ISO/IEC 17025">17025</a> <b>·</b>  <a href="/w/index.php?title=ISO_17369&action=edit&redlink=1" class="new" title="ISO 17369 (página não existe)">17369</a> <b>·</b>  <a href="/wiki/ISO/IEC_17799" class="mw-redirect" title="ISO/IEC 17799">17799</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_18000&action=edit&redlink=1" class="new" title="ISO/IEC 18000 (página não existe)">18000</a> <b>·</b>  <a href="/wiki/QR_Code" class="mw-redirect" title="QR Code">18004</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_18014&action=edit&redlink=1" class="new" title="ISO/IEC 18014 (página não existe)">18014</a> <b>·</b>  <a href="/w/index.php?title=ISO_18245&action=edit&redlink=1" class="new" title="ISO 18245 (página não existe)">18245</a> <b>·</b>  <a href="/w/index.php?title=ISO_18629&action=edit&redlink=1" class="new" title="ISO 18629 (página não existe)">18629</a> <b>·</b>  <a href="/w/index.php?title=ISO_18916&action=edit&redlink=1" class="new" title="ISO 18916 (página não existe)">18916</a> <b>·</b>  <a href="/wiki/PDF/A" title="PDF/A">19005</a> <b>·</b>  <a href="/w/index.php?title=ISO_19011&action=edit&redlink=1" class="new" title="ISO 19011 (página não existe)">19011</a> <b>·</b>  <a href="/w/index.php?title=ISO_19092-1&action=edit&redlink=1" class="new" title="ISO 19092-1 (página não existe)">19092-1</a> <b>·</b>  <a href="/w/index.php?title=ISO_19092-2&action=edit&redlink=1" class="new" title="ISO 19092-2 (página não existe)">19092-2</a> <b>·</b>  <a href="/w/index.php?title=ISO_19114&action=edit&redlink=1" class="new" title="ISO 19114 (página não existe)">19114</a> <b>·</b>  <a href="/w/index.php?title=ISO_19115&action=edit&redlink=1" class="new" title="ISO 19115 (página não existe)">19115</a> <b>·</b>  <a href="/w/index.php?title=ISO_19439&action=edit&redlink=1" class="new" title="ISO 19439 (página não existe)">19439</a> <b>·</b>  <a href="/wiki/UML" title="UML">19501:2005</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_19752&action=edit&redlink=1" class="new" title="ISO/IEC 19752 (página não existe)">19752</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_19757&action=edit&redlink=1" class="new" title="ISO/IEC 19757 (página não existe)">19757</a> <b>·</b>  <a href="/w/index.php?title=ISO_19770&action=edit&redlink=1" class="new" title="ISO 19770 (página não existe)">19770</a> <b>·</b>  <a href="/wiki/X3D" title="X3D">19775-1</a> <b>·</b>  <a href="/wiki/ISO/IEC_20000" class="mw-redirect" title="ISO/IEC 20000">20000</a> <b>·</b>  <a href="/w/index.php?title=ISO_20022&action=edit&redlink=1" class="new" title="ISO 20022 (página não existe)">20022</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_21827:2002&action=edit&redlink=1" class="new" title="ISO/IEC 21827:2002 (página não existe)">21827:2002</a> <b>·</b>  <a href="/w/index.php?title=ISO_22000&action=edit&redlink=1" class="new" title="ISO 22000 (página não existe)">22000</a> <b>·</b>  <a href="/w/index.php?title=C_Sharp_(programming_language)&action=edit&redlink=1" class="new" title="C Sharp (programming language) (página não existe)">23270</a> <b>·</b>  <a href="/w/index.php?title=ISO_25178&action=edit&redlink=1" class="new" title="ISO 25178 (página não existe)">25178</a> <b>·</b>  <a href="/w/index.php?title=ISO_26000&action=edit&redlink=1" class="new" title="ISO 26000 (página não existe)">26000</a> <b>·</b>  <a href="/wiki/OpenDocument" title="OpenDocument">26300</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_27000-series&action=edit&redlink=1" class="new" title="ISO/IEC 27000-series (página não existe)">27000</a> <b>·</b>  <a href="/wiki/ISO/IEC_27001" class="mw-redirect" title="ISO/IEC 27001">27001</a> <b>·</b>  <a href="/wiki/ISO/IEC_27002" title="ISO/IEC 27002">27002</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_27003&action=edit&redlink=1" class="new" title="ISO/IEC 27003 (página não existe)">27003</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_27004&action=edit&redlink=1" class="new" title="ISO/IEC 27004 (página não existe)">27004</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_27005&action=edit&redlink=1" class="new" title="ISO/IEC 27005 (página não existe)">27005</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_27006&action=edit&redlink=1" class="new" title="ISO/IEC 27006 (página não existe)">27006</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_27007&action=edit&redlink=1" class="new" title="ISO/IEC 27007 (página não existe)">27007</a> <b>·</b>  <a href="/w/index.php?title=ISO_27799&action=edit&redlink=1" class="new" title="ISO 27799 (página não existe)">27799</a> <b>·</b> <a href="/wiki/ISO_29110" class="mw-redirect" title="ISO 29110">29110</a> <b>·</b>  <a href="/w/index.php?title=Office_Open_XML&action=edit&redlink=1" class="new" title="Office Open XML (página não existe)">29500</a> <b>·</b>  <a href="/wiki/Portable_Document_Format" title="Portable Document Format">32000</a> <b>·</b>  <a href="/wiki/ISO/IEC_38500" title="ISO/IEC 38500">38500</a> <b>·</b>  <a href="/w/index.php?title=ISO/IEC_42010&action=edit&redlink=1" class="new" title="ISO/IEC 42010 (página não existe)">42010</a> <b>·</b>  <a href="/wiki/ISO/IEC_80000" title="ISO/IEC 80000">80000</a></div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div><i>Ver também:</i> <a class="external text" href="https://pt.wikipedia.org/w/index.php?title=Especial:%C3%8Dndice_de_prefixo&prefix=ISO&namespace=0">Todos os artigos que começam com ISO</a></div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐api‐int.codfw.main‐57484977d8‐pxghd Cached time: 20241119122619 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] CPU time usage: 0.411 seconds Real time usage: 0.561 seconds Preprocessor visited node count: 3862/1000000 Post‐expand include size: 86785/2097152 bytes Template argument size: 2413/2097152 bytes Highest expansion depth: 20/100 Expensive parser function count: 41/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 49990/5000000 bytes Lua time usage: 0.132/10.000 seconds Lua memory usage: 2417968/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 374.424 1 -total 37.90% 141.892 1 Predefinição:Info/Linguagem_de_computador 37.17% 139.155 1 Predefinição:Info 33.90% 126.943 1 Predefinição:Mais-notas 27.63% 103.442 1 Predefinição:Ambox 18.08% 67.689 1 Predefinição:Categorização_AD_e_AB_de_outras_wikis 11.66% 43.644 2 Predefinição:Citar_livro 7.90% 29.568 2 Predefinição:Navbox 5.88% 22.030 1 Predefinição:Referências 5.23% 19.595 1 Predefinição:Normas_ISO --> <!-- Saved in parser cache with key ptwiki:pcache:idhash:49099-0!canonical and timestamp 20241119122619 and revision id 67164555. 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" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Obtida de "<a dir="ltr" href="https://pt.wikipedia.org/w/index.php?title=Prolog&oldid=67164555">https://pt.wikipedia.org/w/index.php?title=Prolog&oldid=67164555</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Especial:Categorias" title="Especial:Categorias">Categorias</a>: <ul><li><a href="/wiki/Categoria:Linguagens_de_programa%C3%A7%C3%A3o_declarativas" title="Categoria:Linguagens de programação declarativas">Linguagens de programação declarativas</a></li><li><a href="/wiki/Categoria:L%C3%B3gica" title="Categoria:Lógica">Lógica</a></li><li><a href="/wiki/Categoria:Intelig%C3%AAncia_artificial" title="Categoria:Inteligência artificial">Inteligência artificial</a></li><li><a href="/wiki/Categoria:Linguagens_de_programa%C3%A7%C3%A3o_l%C3%B3gicas" title="Categoria:Linguagens de programação lógicas">Linguagens de programação lógicas</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Categorias ocultas: <ul><li><a href="/wiki/Categoria:!CS1_manut:_Nomes_m%C3%BAltiplos:_lista_de_autores" title="Categoria:!CS1 manut: Nomes múltiplos: lista de autores">!CS1 manut: Nomes múltiplos: lista de autores</a></li><li><a href="/wiki/Categoria:!Artigos_que_carecem_de_notas_de_rodap%C3%A9_desde_novembro_de_2012" title="Categoria:!Artigos que carecem de notas de rodapé desde novembro de 2012">!Artigos que carecem de notas de rodapé desde novembro de 2012</a></li><li><a href="/wiki/Categoria:!Artigos_que_carecem_de_notas_de_rodap%C3%A9_sem_indica%C3%A7%C3%A3o_de_tema" title="Categoria:!Artigos que carecem de notas de rodapé sem indicação de tema">!Artigos que carecem de notas de rodapé sem indicação de tema</a></li><li><a href="/wiki/Categoria:!Artigos_destacados_na_Wikip%C3%A9dia_em_neerland%C3%AAs" title="Categoria:!Artigos destacados na Wikipédia em neerlandês">!Artigos destacados na Wikipédia em neerlandês</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"> Esta página foi editada pela última vez às 02h19min de 22 de dezembro de 2023.</li> <li id="footer-info-copyright">Este texto é disponibilizado nos termos da licença <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.pt">Atribuição-CompartilhaIgual 4.0 Internacional (CC BY-SA 4.0) da Creative Commons</a>; pode estar sujeito a condições adicionais. Para mais detalhes, consulte as <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">condições de utilização</a>.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/pt-br">Política de privacidade</a></li> <li id="footer-places-about"><a href="/wiki/Wikip%C3%A9dia:Sobre">Sobre a Wikipédia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikip%C3%A9dia:Aviso_geral">Avisos gerais</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Código de conduta</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Programadores</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/pt.wikipedia.org">Estatísticas</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Declaração sobre ''cookies''</a></li> <li id="footer-places-mobileview"><a href="//pt.m.wikipedia.org/w/index.php?title=Prolog&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Versão móvel</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-6987445f8d-626lf","wgBackendResponseTime":241,"wgPageParseReport":{"limitreport":{"cputime":"0.411","walltime":"0.561","ppvisitednodes":{"value":3862,"limit":1000000},"postexpandincludesize":{"value":86785,"limit":2097152},"templateargumentsize":{"value":2413,"limit":2097152},"expansiondepth":{"value":20,"limit":100},"expensivefunctioncount":{"value":41,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":49990,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 374.424 1 -total"," 37.90% 141.892 1 Predefinição:Info/Linguagem_de_computador"," 37.17% 139.155 1 Predefinição:Info"," 33.90% 126.943 1 Predefinição:Mais-notas"," 27.63% 103.442 1 Predefinição:Ambox"," 18.08% 67.689 1 Predefinição:Categorização_AD_e_AB_de_outras_wikis"," 11.66% 43.644 2 Predefinição:Citar_livro"," 7.90% 29.568 2 Predefinição:Navbox"," 5.88% 22.030 1 Predefinição:Referências"," 5.23% 19.595 1 Predefinição:Normas_ISO"]},"scribunto":{"limitreport-timeusage":{"value":"0.132","limit":"10.000"},"limitreport-memusage":{"value":2417968,"limit":52428800}},"cachereport":{"origin":"mw-api-int.codfw.main-57484977d8-pxghd","timestamp":"20241119122619","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Prolog","url":"https:\/\/pt.wikipedia.org\/wiki\/Prolog","sameAs":"http:\/\/www.wikidata.org\/entity\/Q163468","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q163468","author":{"@type":"Organization","name":"Contribuidores dos projetos da Wikimedia"},"publisher":{"@type":"Organization","name":"Funda\u00e7\u00e3o Wikimedia, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2004-12-18T13:30:07Z","dateModified":"2023-12-22T02:19:47Z","headline":"linguagem de programa\u00e7\u00e3o"}</script> </body> </html>