PL-3 Ivan Sendin Programa˘c~ao L ogica Aula 3sendin/Cursos/PL/2S2019/aula3.pdf · 2019. 8. 19. ·...
Embed Size (px)
Transcript of PL-3 Ivan Sendin Programa˘c~ao L ogica Aula 3sendin/Cursos/PL/2S2019/aula3.pdf · 2019. 8. 19. ·...
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Programação Lógica
Aula 3
Ivan Sendin
FACOM - Universidade Federal de Uberlâ[email protected],[email protected]
19 de agosto de 2019
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras gplc/Linux
Olá Mundo
fatos e consultas
Conjunções
-
PL-3
Ivan Sendin
Aula passada
Backtracking
RegrasCodificação
(Escrever um texto e salvar .pl)
Compilar gplc
(Avisos! Normalmente deveŕıamos dar atenção...)
Execução/Perguntas
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Programa Prolog
Especificação de fatos;
Definição de regras;
Perguntas.
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Fatos
Iniciam com letras minusculas
relação e objetos, separados por v́ırgulas
O ponto (.) finaliza um fato
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Perguntas
?−mesma ”cara”1 de um fato
Isso é um fato?
Conjunções
1sintaxe...
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Variáveis
Iniciam com letra maiúscula
Não/Inicializada
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Backtracking
John e Mary...gostam de alguma coisa em comum?
likes(mary,chocolate).
likes(mary,wine).
likes(john,wine).
likes(john,mary).
| ?- likes(john,X),likes(mary,X).
O Prolog percorre os fatos likes até conseguirinstanciar X (X = wine);
Agora o Prolog percorre os fatos procurando pormary/wine;
O prolog volta para o primeiro fato e continua abusca...
(X = mary)
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Regras
Definem uma associação/dependencias entre fatos
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
tem(papagaio,penas).
tem(galinha,penas).
tem(urubu,penas).
eh_animal(papagaio).
eh_animal(galinha).
eh_animal(urubu)
eh_ave(papgaio).
eh_ave(galinha).
eh_ave(urubu).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
tem(papagaio,penas).
tem(galinha,penas).
tem(urubu,penas).
tem(gato,pelos).
eh_animal(papagaio).
eh_animal(galinha).
eh_animal(urubu).
eh_animal(gato).
eh_ave(X) :- eh_animal(X),tem(X,penas).
: −“Se”X é ave SE X é animal e X tem penas
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras | ?- eh_ave(papagaio).
yes
| ?- eh_ave(gato).
no
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Regras
Vamos dizer que:
John gosta de qualquer pessoa que gosta de vinho;
John gosta de qualquer coisa que gosta de vinho;
John gosta de X se X gosta de vinho.
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
likes(john,X) :- likes(X,wine).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
likes(john,mary).
likes(john,rock).
likes(paul,mary).
likes(penny,wine).
likes(john,X) :- likes(X,wine).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
| ?- likes(john,penny).
yes
| ?- likes(john,paul).
no
| ?- likes(john,mary).
true ?
yes
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
| ?- likes(john,X).
X = mary ? ;
X = rock ? ;
X = penny ? ;
no
| ?-
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
O que significam estas regras?
likes(john,X) :- likes(X,wine),likes(X,food).
likes(john,X) :- female(X),likes(X,wine).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Como implementar a regra:”X gosta de quem gosta de X”
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
likes(Y,X) :- likes(X,Y).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Ladroes
Quero saber se alguem vai roubar outro alguem
ladroes e gostos pessoais
thief(john).
likes(mary,chocolate).
likes(mary,wine).
likes(john,X) :- likes(X,wine).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Ladroes
may_steal(X,Y) :- thief(X),likes(X,Y).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Ladroes
may_steal(X,Y) :- thief(X),likes(X,Y).
--
| ?- may_steal(john,mary).
yes
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Grande Familia
male(albert).
male(edward).
female(alice).
female(victoria).
parents(edward,victoria,albert).
parents(alice,victoria,albert).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras Regra para responder se é irmã:
sister_of(X,Y) :- parents(X,M,D),
parents(Y,M,D).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Regra para responder se é irmã:
| ?- sister_of(alice,edward).
yes
| ?- sister_of(edward,alice).
yes
-
PL-3
Ivan Sendin
Aula passada
Backtracking
RegrasRegra para responder se é irmã
sister_of(X,Y) :- female(X),
parents(X,M,D),
parents(Y,M,D).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Regra para responder se é irmã
| ?- sister_of(alice,edward).
yes
| ?- sister_of(edward,alice).
no
| ?- sister_of(alice,alice).
yes
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regrasdiff(X,Y) :- X \== Y.
sister_of(X,Y) :-
female(X),
diff(X,Y),
parents(X,M,D),
parents(Y,M,D).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras | ?- sister_of(alice,alice).
no
| ?- sister_of(alice,edward).
yes
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
DONE!
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
| ?- sister_of(alice,Who).
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras| ?- sister_of(alice,Who).
Who = edward ? ;
Who = alice
yes
-
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Exercicios
1 ”Alguem gosta de algo, se ele gosta de alguem queé influenciador e este influenciador gosta de algo”
2 Pq ?- sister of(alice,Who) ?
3 Exerćıcio 1.3 do livro Clocksin/Mellish.
Aula passadaBacktrackingRegras