Este documento fornece um resumo da sintaxe e semântica da linguagem Prolog. Apresenta os principais elementos da linguagem como átomos, números, variáveis, estruturas e unificação. Explica como a sintaxe especifica os tipos de objetos e como a semântica define o significado desses objetos e suas relações por meio do processo de unificação.
1. Sintaxe e Semântica Prolog
Elaine Faria e Hiran Nonato
Programação Lógica
UFU - 2012
2. Créditos
• O material a seguir consiste de
adaptações e extensões dos originais
gentilmente cedidos pelo Prof. Alexsandro
Santos Soares
• Agradecimento especial ao Prof. Gabriel
Coutinho que auxiliou na confecção do
material
4. Sintaxe e semântica
• O tipo de um objeto é reconhecido por
meio de sua forma sintática.
• Isso é possível porque a sintaxe do Prolog
especifica formas diferentes para cada
tipo de objeto.
6. Sintaxe e Semântica
• Átomos podem ser formados por:
1. Cadeia de letras ou dígitos, iniciando
obrigatoriamente com letra minúscula.
(podendo conter o símbolo _)
Ex: socrates, joao, x_1
2. Cadeia de caracteres especiais.
Ex: <----> ::=
3. Cadeia de caracteres quaisquer, inclusive
espaço em branco, desde que usando o
símbolo ‘.
Ex: ‘Prog. Lógico’
8. Sintaxe e Semântica
• Variáveis:
– São cadeias de letras, dígitos ou caractere
sublinhado (_), devendo iniciar com este ou
com uma letra maiúscula
– O caractere "_", sozinho, representa uma
variável anônima, isto é, sem interesse para
um determinado procedimento
– Exemplos de variáveis: X, Resultado, _var, _
9. Sintaxe e Semântica
Variáveis (cont.)
• O escopo léxico de nomes de variáveis é
apenas uma cláusula
• Ex: se o nome X25 ocorre em duas cláusulas
diferentes, então ele está representando duas
variáveis diferentes; toda ocorrência de X25 dentro
da mesma cláusula quer significar a mesma
variável
10. Sintaxe e Semântica
• Variáveis (cont.)
– Uma variável pode estar
• Instanciada: quando á variável já referencia algum objeto
• não-instanciada: quando a variável não referencia nenhum
objeto, ou seja, quando o objeto a que ela referencia ainda
não é conhecido
– Quando uma variável é usada numa pergunta, o
Prolog procura todos os fatos tentando encontrar um
objeto no qual a variável possa ser instanciada
• Quando uma solução é encontrada, ela é mostrada. Se o
usuário estiver satisfeito com a resposta, basta digitar return
• Se desejar mais respostas, usa-se ponto-evírgula “;”
11. Sintaxe e Semântica
• Variáveis (cont.)
Base de fatos: Qual o resultado das seguintes
perguntas?
gosta(joao, peixe). ?- gosta(maria,X).
gosta(joao,maria). ?- gosta(X,livro).
gosta(maria,livro). ?- gosta(Quem,Oque).
gosta(pedro,livro). ?- gosta(X,Y).
gosta(maria,flor). ?- gosta(X,X).
gosta(maria,vinho). ?- gosta(_a,_b).
?- gosta(A,peixe).
12. Sintaxe e Semântica
• Estruturas
– São objetos que possuem vários componentes
– Os próprios componentes podem ser também
estruturas
– Ex: Data estrutura com 3 componentes
Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997.
13. Sintaxe e Semântica
• Estruturas
– Ex: data(Dia, março, 1996)
• A variável Dia pode ser instanciada para qualquer
objeto
– Todos os objetos em Prolog são denominados
termos.
• Toda constante é um termo
• Toda variável é um termo
• Se t1, t2, ..., tn são termos e f é um átomo, então
f(t1, t2, ..., tn) também é um termo
14. Sintaxe e Semântica
• Estruturas
– Todos os objetos estruturados podem ser
representados como árvores
• A raiz da árvore é o functor
• os ramos que dela partem são os argumentos ou
componentes
• Ex: (a + b) * (c - 5)
*(+(a, b), -(c, 5))
15. Sintaxe e Semântica
• Unificação
– É o processo que, dados dois termos como
dados de entrada verifica-se eles se “casam”
– Dados dois termos, diz-se que eles unificam
se
• Eles são idênticos ou
• As variáveis de ambos os termos podem ser
instanciadas com objetos de maneira que, após a
substituição das variáveis por esses objetos, os
termos se tornam idênticos
16. • Unificação
Isto significa que:
• maria e maria se unificam
• 42 e 42 se unificam
• mulher(maria) e mulher(maria) se unificam
Isto também significa que:
• vicente e maria não se unificam
• mulher(maria) e mulher(joana) não se unificam
Sintaxe e Semântica
17. • Unificação
• Os termos abaixo se unificam?
• maria e X
Sintaxe e Semântica
18. • Unificação
• Os termos abaixo se unificam?
• maria e X
• mulher(Z) e mulher(maria)
Sintaxe e Semântica
19. • Unificação
• Os termos abaixo se unificam?
• maria e X
• mulher(Z) e mulher(maria)
• ama(maria,X) e ama(X,vicente)
Sintaxe e Semântica
21. Como Prolog responderá?
?- X=maria, X=vicente.
false
?-
Por quê? Após trabalhar na primeira
meta, Prolog instanciou a variável X
com maria, e assim ele não pode mais
unificá-la com vicente. Logo, a
segunda meta falha.
22. • Unificação (cont.)
– Se os termos não unificam, dizemos que o
processo falha.
– Se eles unificam, então o processo é bem-
sucedido
– Exemplo
data(D, M, 1994) e data(X, março, A) unificam
data(D, M, 1994) e data(X, Y, 94) não unificam
Sintaxe e Semântica
23. Sintaxe e Semântica
• Unificação (cont.)
– Regras que determinam se dois termos S e T unificam
• Se S e T são constantes, então S e T unificam somente se
ambos representam o mesmo objeto
• Se S é uma variável e T é qualquer coisa, então S e T unificam
com S instanciada com T. Inversamente, se T é uma variável,
então T é instanciada com S;
• Se S e T são estruturas, unificam somente se: (1) S e T tem o
mesmo functor principal, e (2) todos os seus componentes
correspondentes também unificam. A instanciação resultante é
determinada pela unificação dos componentes
Exemplo:
triângulo(ponto(1, 1), A, ponto(2, 3)) e triângulo(X, ponto(4, Y), ponto(2, Z))?
24. Sintaxe e Semântica
• Seja a base de dados:
grande(urso). % Cláusula 1
grande(elefante). % Cláusula 2
pequeno(gato). % Cláusula 3
marrom(urso). % Cláusula 4
preto(gato) % Cláusula 5
cinza(elefante). % Cláusula 6
escuro(Z) :- % Cláusula 7
preto(Z).
escuro(Z) :- % Cláusula 8
marrom(Z).
• Qual o resultado da consulta:
– ?- escuro(X), grande(X).
X = urso.
25. Exemplo com termos complexos:
?- k(s(g),Y) = k(X,t(k)).
Sintaxe e Semântica
26. Exemplo com termos complexos:
?- k(s(g),Y) = k(X,t(k)).
X=s(g)
Y=t(k)
true
?-
Sintaxe e Semântica
27. Exemplo com termos complexos:
?- k(s(g),t(k)) = k(X,t(Y)).
Sintaxe e Semântica
28. Exemplo com termos complexos:
?- k(s(g),t(k)) = k(X,t(Y)).
X=s(g)
Y=k
true
?-
Sintaxe e Semântica
29. Busca pela prova
• Agora que conhecemos a unificação,
começaremos a aprender como Prolog
busca em base de conhecimento para
ver se uma consulta é satisfeita.
• Em outras palavras: nós começaremos a
aprender sobre a busca pela prova
30. Exemplo: árvore de busca
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
Base de dados
Consulta