Este documento apresenta alguns conceitos básicos de Prolog, incluindo:
1) Consultas combinadas podem juntar objetivos lógicos usando vírgulas para representar conjunções;
2) Predicados internos já implementados no Prolog podem ser usados para tarefas como entrada/saída;
3) Exemplos demonstram o uso de consultas combinadas, predicados internos e exercícios de resolução.
1. Programação em LógicaProgramação em Lógica
MatemáticaMatemática
PrologProlog
– 03 –– 03 –
Inteligência ArtificialInteligência Artificial
Fábio M. PereiraFábio M. Pereira
Baseado emBaseado em
Amzi! inc. – www.amzi.comAmzi! inc. – www.amzi.com
3. Consultas Combinadas (1)Consultas Combinadas (1)
► Consultas simples podem ser combinadas paraConsultas simples podem ser combinadas para
formar consultas complexasformar consultas complexas
► Exemplo:Exemplo:
Quais objetos comestíveis estão na cozinha?Quais objetos comestíveis estão na cozinha?
?-?- local(X, cozinha), comestivel(X).local(X, cozinha), comestivel(X).
► Uma consulta combinada possui umaUma consulta combinada possui uma conjunçãoconjunção dede
objetivosobjetivos
A vírgula separando os objetivos é lida como “e”A vírgula separando os objetivos é lida como “e”
Existe um X, tal que X esteja localizado na cozinhaExiste um X, tal que X esteja localizado na cozinha ee X éX é
comestível?comestível?
► Se uma mesma variável aparece mais de uma vezSe uma mesma variável aparece mais de uma vez
em um consulta, ela deve ter o mesmo valor emem um consulta, ela deve ter o mesmo valor em
todos os locais em que aparecetodos os locais em que aparece
4. Consultas Combinadas (2)Consultas Combinadas (2)
► O nome de uma variável não possui nenhumO nome de uma variável não possui nenhum
significado em qualquer outra consulta, ou cláusulasignificado em qualquer outra consulta, ou cláusula
do banco de dadosdo banco de dados
Se X aparece em outras consultas ou cláusulas, aSe X aparece em outras consultas ou cláusulas, a
consulta ou cláusula possui a sua própria cópia daconsulta ou cláusula possui a sua própria cópia da
variávelvariável
Dizemos que oDizemos que o escopoescopo de uma variável lógica é umade uma variável lógica é uma
consultaconsulta
► Ordem de execuçãoOrdem de execução
Uma consulta combinada inicia chamando o primeiroUma consulta combinada inicia chamando o primeiro
objetivo a esquerdaobjetivo a esquerda
Se bem sucedido, o próximo objetivo é chamado com asSe bem sucedido, o próximo objetivo é chamado com as
variáveis ligadas como um conjunto do objetivo préviovariáveis ligadas como um conjunto do objetivo prévio
Se a consulta termina via portaSe a consulta termina via porta exitexit do objetivo mais ado objetivo mais a
direita, ela é bem sucedida e Prolog imprime os valoresdireita, ela é bem sucedida e Prolog imprime os valores
da tabela de variáveisda tabela de variáveis
5. Consultas Combinadas (3)Consultas Combinadas (3)
► Ordem de execução (cont.)Ordem de execução (cont.)
Se um usuário digita um ponto e vírgula (;) após umaSe um usuário digita um ponto e vírgula (;) após uma
resposta, a consulta é retomada na portaresposta, a consulta é retomada na porta redoredo dodo
objetivo mais a direitaobjetivo mais a direita
Somente as variáveis ligadas deste conjunto sãoSomente as variáveis ligadas deste conjunto são
desfeitasdesfeitas
Se a consulta termina via portaSe a consulta termina via porta failfail do objetivo mais ado objetivo mais a
esquerda, a consulta falhaesquerda, a consulta falha
Utilize o debug para acompanhar o processoUtilize o debug para acompanhar o processo variables
query out
no ;
Goal 1 Goal 2
7. Exemplo com Duas VariáveisExemplo com Duas Variáveis
►Liste todos os objetos localizados em salasListe todos os objetos localizados em salas
adjacentes à cozinhaadjacentes à cozinha
►Em termos lógicos:Em termos lógicos:
Encontre T e R de modo que exista uma porta daEncontre T e R de modo que exista uma porta da
cozinha para R e T está localizado em Rcozinha para R e T está localizado em R
?- porta(cozinha, R), local(T,R).
R = escritório
T = escrivaninha;
R = escritório
T = computador;
R = porão
T = ‘máquina de lavar’;
No
8. Predicados Internos (1)Predicados Internos (1)
► Até este ponto vimos qual o formato utilizado porAté este ponto vimos qual o formato utilizado por
Prolog para nos responder às consultasProlog para nos responder às consultas
► A partir de agora veremos como gerar consultasA partir de agora veremos como gerar consultas
personalizadas de acordo com nossaspersonalizadas de acordo com nossas
necessidadesnecessidades
► Características de Predicados InternosCaracterísticas de Predicados Internos
Não existem cláusulas no banco de dados paraNão existem cláusulas no banco de dados para
predicados internospredicados internos
Um predicado interno é predefinido por PrologUm predicado interno é predefinido por Prolog
São normalmente escritos na linguagem usada paraSão normalmente escritos na linguagem usada para
implementar o Prologimplementar o Prolog
Podem realizar funções não relacionadas com o teoremaPodem realizar funções não relacionadas com o teorema
de prova lógicade prova lógica
São chamados as vezes de predicados extra-lógicosSão chamados as vezes de predicados extra-lógicos
9. Predicados Internos (2)Predicados Internos (2)
►Veremos os predicados internos à medidaVeremos os predicados internos à medida
que precisemos delesque precisemos deles
►Predicados de entrada/saída usados paraPredicados de entrada/saída usados para
imprimir uma consultaimprimir uma consulta
write/1write/1 – imprime o seu argumento na tela,– imprime o seu argumento na tela,
sempre falha em um backtrackingsempre falha em um backtracking
nl/0nl/0 – inicia uma nova linha– inicia uma nova linha
tab/1tab/1 – espera um inteiro como argumento e– espera um inteiro como argumento e
tabula o número de espaçostabula o número de espaços
fail/0fail/0 – provoca uma falha, ou seja, passa o– provoca uma falha, ou seja, passa o
controle imediatamente para uma porta redocontrole imediatamente para uma porta redo
10. ExemplosExemplos
►Listar todos os objetos que estão na cozinhaListar todos os objetos que estão na cozinha
?-?- local(X, cozinha), write(X), nl, fail.local(X, cozinha), write(X), nl, fail.
maçãmaçã
brócolisbrócolis
biscoitobiscoito
NoNo
?-?- local(X, cozinha), write(X), tab(8), fail.local(X, cozinha), write(X), tab(8), fail.
maçã brócolis biscoitomaçã brócolis biscoito
11. Exercícios (1)Exercícios (1)
► Considere o banco de dados PrologConsidere o banco de dados Prolog
► Quais os resultados das seguintes consultas?Quais os resultados das seguintes consultas?
?-?- gizmo(a,X), easy(X).gizmo(a,X), easy(X).
?-?- gizmo(c,X), easy(X).gizmo(c,X), easy(X).
?-?- gizmo(d,Z), easy(Z).gizmo(d,Z), easy(Z).
?-?- easy(Y), gizmo(X,Y).easy(Y), gizmo(X,Y).
?-?- write(‘report’), nl, easy(T), write(T), gizmo(M, T), tab(2), write(M),write(‘report’), nl, easy(T), write(T), gizmo(M, T), tab(2), write(M),
fail.fail.
?-?- write(‘buggy’), nl, easy(Z), write(X), gizmo(Z,X), tab(2), write(Z),write(‘buggy’), nl, easy(Z), write(X), gizmo(Z,X), tab(2), write(Z),
fail.fail.
?-?- easy(X), harder(Y, X).easy(X), harder(Y, X).
easy(1).
easy(2).
easy(3).
gizmo(a,1).
gizmo(b,3).
gizmo(a,2).
gizmo(d,5).
gizmo(c,3).
gizmo(a,3).
gizmo(c,4).
harder(a,1).
harder(c,X).
harder(b,4).
harder(d,2).
12. Exercícios (2)Exercícios (2)
► Qual o resultado da consulta?Qual o resultado da consulta?
?-?- porta(cozinha, R), write(R), nl, local(T, R), tab(3),porta(cozinha, R), write(R), nl, local(T, R), tab(3),
write(T), nl, fail.write(T), nl, fail.
► Banco de Dados GenealógicoBanco de Dados Genealógico
Encontre alguém que seja mãeEncontre alguém que seja mãe
?-?- pais(X, Alguem), mulher(X).pais(X, Alguem), mulher(X).
Escreva consultas similares para pai, filho e filhaEscreva consultas similares para pai, filho e filha
Rastreie a execução e compare:Rastreie a execução e compare:
?-?- pais(X, Alguem), mulher(X).pais(X, Alguem), mulher(X).
?-?- mulher(X), pais(X, Alguem).mulher(X), pais(X, Alguem).
Elas possuem as mesmas respostas?Elas possuem as mesmas respostas?
Escreva consultas para encontrar avós, avôs e bisavôsEscreva consultas para encontrar avós, avôs e bisavôs
13. O que vem a seguir?O que vem a seguir?
►RegrasRegras
►AritméticaAritmética
►......