PL-3 Ivan Sendin Programa˘c~ao L ogica Aula 3sendin/Cursos/PL/2S2019/aula3.pdf · 2019. 8. 19. ·...

of 34 /34
PL-3 Ivan Sendin Aula passada Backtracking Regras Programa¸ aoL´ogica Aula 3 Ivan Sendin FACOM - Universidade Federal de Uberlˆ andia [email protected],[email protected] 19 de agosto de 2019

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