Prolog: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Especifiquei o significado da sigla.
m ajustes usando script
Linha 6:
|ano = [[1972]]
|criador = [[Alain Colmerauer]] e [[Robert Kowalski]]
|tipagem =
|compiladores = [[GNU Prolog]], [[Quintus]], [[SICStus]], [[SWI-Prolog]], [[YAP]]
|dialetos = ISO Prolog, Edinburgh Prolog
Linha 33:
== História ==
 
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<ref name="hoplii">{{Referência acitar livro|autor=BERGIN, Thomas J.; GIBSON, Richard G.|título=History of Programming Languages II|subtítulo=|idioma=|edição=|local=New York|editora=ACM Press, Addison-Wesley|ano=1996|páginas=864|volumes=|volume=|ID={{ISBN|0-201-89502-1}}}}</ref>.
 
== Características ==
 
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 [[Banco de dados|base de dados]] de ''fatos'' e de relações lógicas (''regras'') que exprimem o domínio relacional do problema a resolver.
 
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.
Linha 119:
 
<source lang="prolog">
?- gato(tom).
yes.
</source>
Linha 126:
 
<source lang="prolog">
?- gato(X).
X = tom;
yes.
Linha 148:
 
<source lang="prolog">
write('Olá').
</source>
 
Linha 157:
 
<source lang="prolog">
luz(acesa) :- interruptor(ligado).
</source>
 
Linha 178:
<source lang="prolog">
a :- b.
a :- c.
a :- d.
</source>
Linha 215:
</source>
 
a consulta resultará uma recursão infinita.
 
==== Recursão em cauda ====
Linha 275:
 
<source lang="prolog">
irmaos(X,Y) :- filho(X,Z), filho(Y,Z).
</source>que em Lógica de Primeira ordem é: <math>\forall</math>X<math>\forall</math>Y<math>\forall</math>Z((filho(X,Z)^filho(Y,Z))<math>\rightarrow</math>irmaos(X,Y))
<source lang="prolog">
Linha 322:
=== Backtracking ===
 
Backtracking é um procedimento dentro da [[linguagem]] Prolog. Uma busca inicial
em um programa nesta linguagem segue o padrão [[Busca em profundidade]] (''depth-first search''), ou seja, a [[árvore]] é percorrida sistematicamente de cima para baixo e da esquerda para direita. Quando essa pesquisa falha, ou é encontrado um [[nó terminal da árvore]], 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.
 
Linha 336:
 
=== Comando ''Cut'' ===
 
O comando ''cut'' permite indicar ao Prolog quais sub-objetivos já satisfeitos não necessitam ser reconsiderados ao se realizar um [[backtracking]]. 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 [[laço infinito]].
Linha 361:
=== Comando ''Fail'' ===
 
Inversamente ao comando ''cut'', o predicado pré-definido ''fail'' sempre falha. O operador de corte pode ser combinado com o predicado ''fail'' para produzir uma falha forçada.
Uma conjunção de objetivos da forma
 
Linha 380:
rato(jerry).
cachorro(spike).
 
gosta(ana,X) :- gato(X),!,fail.
gosta(ana,X) :- mamifero(X).
Linha 547:
* [http://www.lim.univ-mrs.fr/~colmer/ArchivesPublications/HistoireProlog/19november92.pdf Alain Colmerauer's and Philippe Roussel's account of the birth of Prolog]
* BEBREGAL, Benjamín Callejas; ACIOLY, Benedito Melo. Lógica para Ciência da Computação, versão preliminar 2006.
* {{Referência acitar livro|autor=Sterling, Leon; Shapiro, Ehud|título=The Art of Prolog|subtítulo=Advanced Programming Techniques|idioma=|edição=|local=Cambridge|editora=The MIT Press|ano=1986|páginas=437|volumes=|volume=|idisbn=ISBN 0-262-19250-0}}
 
{{referências}}