Sintaxe e Semântica Prolog
Elaine Faria e Hiran Nonato
Programação Lógica
UFU - 2012
Créditos
• O material a seguir consiste de
adaptações e extensões dos originais
gentilmente cedidos pelo Prof. Alexsandro
...
Sintaxe e Semântica
Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997.
Sintaxe e semântica
• O tipo de um objeto é reconhecido por
meio de sua forma sintática.
• Isso é possível porque a sintax...
Sintaxe e Semântica
• Alfabeto do Prolog
– Pontuação: () .
– Conectivos:
• Conjunção ,
• Disjunção ;
• Implicação :-
– Let...
Sintaxe e Semântica
• Átomos podem ser formados por:
1. Cadeia de letras ou dígitos, iniciando
obrigatoriamente com letra ...
Sintaxe e Semântica
• Números
– Inteiros
• Exemplos: 1
1812
-273
– Reais
• Ex: 3.1415
-273.16
Sintaxe e Semântica
• Variáveis:
– São cadeias de letras, dígitos ou caractere
sublinhado (_), devendo iniciar com este ou...
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 oc...
Sintaxe e Semântica
• Variáveis (cont.)
– Uma variável pode estar
• Instanciada: quando á variável já referencia algum obj...
Sintaxe e Semântica
• Variáveis (cont.)
Base de fatos: Qual o resultado das seguintes
perguntas?
gosta(joao, peixe). ?- go...
Sintaxe e Semântica
• Estruturas
– São objetos que possuem vários componentes
– Os próprios componentes podem ser também
e...
Sintaxe e Semântica
• Estruturas
– Ex: data(Dia, março, 1996)
• A variável Dia pode ser instanciada para qualquer
objeto
–...
Sintaxe e Semântica
• Estruturas
– Todos os objetos estruturados podem ser
representados como árvores
• A raiz da árvore é...
Sintaxe e Semântica
• Unificação
– É o processo que, dados dois termos como
dados de entrada verifica-se eles se “casam”
–...
• Unificação
Isto significa que:
• maria e maria se unificam
• 42 e 42 se unificam
• mulher(maria) e mulher(maria) se unif...
• Unificação
• Os termos abaixo se unificam?
• maria e X
Sintaxe e Semântica
• Unificação
• Os termos abaixo se unificam?
• maria e X
• mulher(Z) e mulher(maria)
Sintaxe e Semântica
• Unificação
• Os termos abaixo se unificam?
• maria e X
• mulher(Z) e mulher(maria)
• ama(maria,X) e ama(X,vicente)
Sinta...
• Unificação
?- X=maria, X=vicente.
Sintaxe e Semântica
Como Prolog responderá?
?- X=maria, X=vicente.
false
?-
Por quê? Após trabalhar na primeira
meta, Prolog instanciou a vari...
• Unificação (cont.)
– Se os termos não unificam, dizemos que o
processo falha.
– Se eles unificam, então o processo é bem...
Sintaxe e Semântica
• Unificação (cont.)
– Regras que determinam se dois termos S e T unificam
• Se S e T são constantes, ...
Sintaxe e Semântica
• Seja a base de dados:
grande(urso). % Cláusula 1
grande(elefante). % Cláusula 2
pequeno(gato). % Clá...
Exemplo com termos complexos:
?- k(s(g),Y) = k(X,t(k)).
Sintaxe e Semântica
Exemplo com termos complexos:
?- k(s(g),Y) = k(X,t(k)).
X=s(g)
Y=t(k)
true
?-
Sintaxe e Semântica
Exemplo com termos complexos:
?- k(s(g),t(k)) = k(X,t(Y)).
Sintaxe e Semântica
Exemplo com termos complexos:
?- k(s(g),t(k)) = k(X,t(Y)).
X=s(g)
Y=k
true
?-
Sintaxe e Semântica
Busca pela prova
• Agora que conhecemos a unificação,
começaremos a aprender como Prolog
busca em base de conhecimento par...
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
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
Exemplo: árvore de busca
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
Y=X
Exemplo: árvore de busca
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
X=a
Y=X
Exemp...
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
X=a
...
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
X=a
...
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
X=a
...
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
X=a
...
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
Y=b
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
...
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
Y=b.
?-
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(...
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
Outro exemplo: árvore de b...
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
?- tem_ciume(X,Y).
Outro e...
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
?- tem_ciume(X,Y).
?- ama(...
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
?- tem_ciume(X,Y).
?- ama(...
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
X=vicente
Y=vicente
?- tem...
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
X=vicente
Y=vicente;
X=vic...
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
X=vicente
Y=vicente;
X=vic...
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
.
X=vicente
Y=marcelo;
X=marcelo
Y=vicente
?-...
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
.
X=marcelo
Y=vicente;
X=marcelo
Y=marcelo
?-...
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
.
X=marcelo
Y=vicente;
X=marcelo
Y=marcelo.
?...
Referências
• Luis, A. M. Palazzo, Introdução à
Programação Prolog, Educat, 1997.
• Slides da Profa Solange – ICMC-USP –
I...
Próximos SlideShares
Carregando em…5
×

Aula3 sintaxe semantica

369 visualizações

Publicada em

Publicada em: Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
369
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
7
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aula3 sintaxe semantica

  1. 1. Sintaxe e Semântica Prolog Elaine Faria e Hiran Nonato Programação Lógica UFU - 2012
  2. 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
  3. 3. Sintaxe e Semântica Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997.
  4. 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.
  5. 5. Sintaxe e Semântica • Alfabeto do Prolog – Pontuação: () . – Conectivos: • Conjunção , • Disjunção ; • Implicação :- – Letras: a,b,c,..,z,A,B,C..,Z – Dígitos: 0,1,..,9 – Especiais: + - * / <> = _
  6. 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’
  7. 7. Sintaxe e Semântica • Números – Inteiros • Exemplos: 1 1812 -273 – Reais • Ex: 3.1415 -273.16
  8. 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. 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. 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. 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. 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. 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. 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. 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. 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. 17. • Unificação • Os termos abaixo se unificam? • maria e X Sintaxe e Semântica
  18. 18. • Unificação • Os termos abaixo se unificam? • maria e X • mulher(Z) e mulher(maria) Sintaxe e Semântica
  19. 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
  20. 20. • Unificação ?- X=maria, X=vicente. Sintaxe e Semântica
  21. 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. 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. 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. 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. 25. Exemplo com termos complexos: ?- k(s(g),Y) = k(X,t(k)). Sintaxe e Semântica
  26. 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. 27. Exemplo com termos complexos: ?- k(s(g),t(k)) = k(X,t(Y)). Sintaxe e Semântica
  28. 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. 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. 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
  31. 31. f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- k(Y). Exemplo: árvore de busca
  32. 32. f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- k(Y). ?- f(X), g(X), h(X). Y=X Exemplo: árvore de busca
  33. 33. f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). X=a Y=X Exemplo: árvore de busca
  34. 34. f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a Y=X Exemplo: árvore de busca
  35. 35. f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a †††† Y=X Exemplo: árvore de busca
  36. 36. f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a ?- g(b), h(b). X=b †††† Y=X Exemplo: árvore de busca
  37. 37. f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a ?- g(b), h(b). X=b ?- h(b). †††† Y=X Exemplo: árvore de busca
  38. 38. f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=b ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a ?- g(b), h(b). X=b ?- h(b). †††† Y=X Exemplo: árvore de busca
  39. 39. f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=b. ?- ?- k(Y). ?- f(X), g(X), h(X). ?- g(a), h(a). ?- h(a). X=a ?- g(b), h(b). X=b ?- h(b). †††† Y=X Exemplo: árvore de busca
  40. 40. ama(vicente,maria). ama(marcelo,maria). tem_ciume(A,B):- ama(A,C), ama(B,C). ?- tem_ciume(X,Y). Outro exemplo: árvore de busca Base de dados Consulta
  41. 41. ama(vicente,maria). ama(marcelo,maria). tem_ciume(A,B):- ama(A,C), ama(B,C). ?- tem_ciume(X,Y). ?- tem_ciume(X,Y). Outro exemplo: árvore de busca
  42. 42. ama(vicente,maria). ama(marcelo,maria). tem_ciume(A,B):- ama(A,C), ama(B,C). ?- tem_ciume(X,Y). ?- tem_ciume(X,Y). ?- ama(A,C), ama(B,C). X=A Y=B Outro exemplo: árvore de busca
  43. 43. ama(vicente,maria). ama(marcelo,maria). tem_ciume(A,B):- ama(A,C), ama(B,C). ?- tem_ciume(X,Y). ?- tem_ciume(X,Y). ?- ama(A,C), ama(B,C). ?- ama(B,maria). A=vicente C=maria X=A Y=B Outro exemplo: árvore de busca
  44. 44. ama(vicente,maria). ama(marcelo,maria). tem_ciume(A,B):- ama(A,C), ama(B,C). ?- tem_ciume(X,Y). X=vicente Y=vicente ?- tem_ciume(X,Y). ?- ama(A,C), ama(B,C). ?- ama(B,maria). A=vicente C=maria B=vicente X=A Y=B Outro exemplo: árvore de busca
  45. 45. ama(vicente,maria). ama(marcelo,maria). tem_ciume(A,B):- ama(A,C), ama(B,C). ?- tem_ciume(X,Y). X=vicente Y=vicente; X=vicente Y=marcelo ?- tem_ciume(X,Y). ?- ama(A,C), ama(B,C). ?- ama(B,maria). A=vicente C=maria B=vicente B=marcelo X=A Y=B Outro exemplo: árvore de busca
  46. 46. ama(vicente,maria). ama(marcelo,maria). tem_ciume(A,B):- ama(A,C), ama(B,C). ?- tem_ciume(X,Y). X=vicente Y=vicente; X=vicente Y=marcelo; ?- tem_ciume(X,Y). ?- ama(A,C), ama(B,C). ?- ama(B,maria). A=vicente C=maria ?- ama(B,maria). A=marcelo C=maria B=vicente B=marcelo X=A Y=B Outro exemplo: árvore de busca
  47. 47. ama(vicente,maria). ama(marcelo,maria). tem_ciume(A,B):- ama(A,C), ama(B,C). . X=vicente Y=marcelo; X=marcelo Y=vicente ?- tem_ciume(X,Y). ?- ama(A,C), ama(B,C). ?- ama(B,maria). A=vicente C=maria ?- ama(B,maria). A=marcelo C=maria B=vicente B=vicente B=marcelo X=A Y=B Outro exemplo: árvore de busca
  48. 48. ama(vicente,maria). ama(marcelo,maria). tem_ciume(A,B):- ama(A,C), ama(B,C). . X=marcelo Y=vicente; X=marcelo Y=marcelo ?- tem_ciume(X,Y). ?- ama(A,C), ama(B,C). ?- ama(B,maria). A=vicente C=maria ?- ama(B,maria). A=marcelo C=maria B=vicente B=vicente B=marcelo B=marcelo X=A Y=B Outro exemplo: árvore de busca
  49. 49. ama(vicente,maria). ama(marcelo,maria). tem_ciume(A,B):- ama(A,C), ama(B,C). . X=marcelo Y=vicente; X=marcelo Y=marcelo. ?- tem_ciume(X,Y). ?- ama(A,C), ama(B,C). ?- ama(B,maria). A=vicente C=maria ?- ama(B,maria). A=marcelo C=maria B=vicente B=vicente B=marcelo B=marcelo X=A Y=B Outro exemplo: árvore de busca
  50. 50. Referências • Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997. • Slides da Profa Solange – ICMC-USP – Inteligência Artificial.

×