PL-3 Ivan Sendin Programa˘c~ao L ogica Aula 3sendin/Cursos/PL/2S2019/aula3.pdf · 2019. 8. 19. ·...
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
Programacao Logica
Aula 3
Ivan Sendin
FACOM - Universidade Federal de [email protected],[email protected]
19 de agosto de 2019
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras gplc/Linux
Ola Mundo
fatos e consultas
Conjuncoes
PL-3
Ivan Sendin
Aula passada
Backtracking
RegrasCodificacao
(Escrever um texto e salvar .pl)
Compilar gplc
(Avisos! Normalmente deverıamos dar atencao...)
Execucao/Perguntas
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Programa Prolog
Especificacao de fatos;
Definicao de regras;
Perguntas.
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Fatos
Iniciam com letras minusculas
relacao 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 e um fato?
Conjuncoes
1sintaxe...
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Variaveis
Iniciam com letra maiuscula
Nao/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 ate 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 associacao/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 e ave SE X e 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 e irma:
sister_of(X,Y) :- parents(X,M,D),
parents(Y,M,D).
PL-3
Ivan Sendin
Aula passada
Backtracking
Regras
Regra para responder se e irma:
| ?- sister_of(alice,edward).
yes
| ?- sister_of(edward,alice).
yes
PL-3
Ivan Sendin
Aula passada
Backtracking
RegrasRegra para responder se e irma
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 e irma
| ?- 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 quee influenciador e este influenciador gosta de algo”
2 Pq ?- sister of(alice,Who) ?
3 Exercıcio 1.3 do livro Clocksin/Mellish.