pl-9 laboratorio entregas programa˘c~ao l ogica aula 9sendin/cursos/pl/2s2019/aula9.pdf · pl-9...

29
PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa¸ aoL´ogica Aula 9 Ivan Sendin FACOM - Universidade Federal de Uberlˆ andia [email protected] 9 de setembro de 2019

Upload: others

Post on 16-Apr-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Programacao Logica

Aula 9

Ivan Sendin

FACOM - Universidade Federal de [email protected]

9 de setembro de 2019

Page 2: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Sobre o lab

Quando voce tiver uma solucao voce deve tentar,pensar, modificar,...estouro de pilha nao estraga ocomputador!

Os exemplos apresentados sao testados usandos ogplc. Outros compiladores/ambientes apresentamcomportamentos levemente diferentes.

Page 3: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Entregas...

Datas SEMPRE no site

Datas SEMPRE no site

Datas SEMPRE no site

Se nao tem Data no site, nao precisa entregar.

Precisa fazer e saber fazer

Page 4: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

The Prolog Way...

O jeito Prolog1 de resolver as coisas

Existem outras formas, mesmo dentro do Prolog

Como contar a quantidade de vogais de uma lista?

Como contar a quantidade de figuras de umbaralho?

1O nome correto e recursao!

Page 5: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Como contar a quantidade de figuras de umbaralho?

Voce nao consegue espalhar o baralho sobre amesa...

Ve apenas a carta do topo(=head)

Page 6: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Como contar a quantidade de figuras de umbaralho?

Voce nao consegue espalhar o baralho sobre amesa...

Ve apenas a carta do topo(=head)

Page 7: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Pego a primeira carta e

Peco ajuda de alguem.

Esse alguem diz que o total de figuras e N1

Se a carta na minha mao e figuras, N1+1

N1, caso contrario

Page 8: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Uma forma de resolver problemas - em geral:

Se eu sei resolver o problema pequeno;

Se eu sei dimunir o problema;

Se eu sei combinar a solucao menor com a”completa”;

Eu nao tenho mais um problema!!

Page 9: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog Como construir um predio de 50 andares??

Page 10: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Predio de 50 andares

Se eu sei resolver o problema pequeno: existealguem para construir o terreo;

Se eu sei dimunir o problema: peco para alguemcontruir o andar 49;

Se eu sei combinar a solucao menor com a”completa”: sei colocar os tijos em cima do 49;

Predio construıdo

Page 11: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Voltando para a lista...

Uma forma de resolver problemas:

Se eu sei resolver o problema pequeno;Zero cartas para lista vazia.

Se eu sei dimunir o problema;Head|Tail

Se eu sei combinar a solucao menor com a”completa”;Somar 1 se H for vogal!

Eu nao tenho mais um problema!!

Page 12: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Exercicio contaVogal

contaVogal([],0).

contaVogal([H|T],N) :- determina a solucao no

problema menor,

combina a solucao.

Page 13: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Exercicio contaVogal

contaVogal([],0).

contaVogal([H|T],N) :- contaVogal(T,N1),

combina a solucao.

Terminar...

Page 14: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Conta ocorrencias...

conta(_,[],N) :- N is 0.

conta(X,[H|T],N) :- X=H,conta(X,T,N1),N is N1+1;

conta(X,T,N1),N is N1.

?- conta(a,[a,b,c,d,a,f],N).

N=2

N=1

N=1

...

Page 15: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Conta ocorrencias...

conta(_,[],N) :- N is 0.

conta(X,[H|T],N) :- X=H,conta(X,T,N1),N is N1+1;

X\==H,conta(X,T,N1),N is N1.

Page 16: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

! elimina a tentativa do Prolog de tentarre-satisfazer um objetivo

cut

Page 17: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Conta ocorrencias...

1: r(..) :- xxxxx .

2: r(..) :- zzzzz .

3: r(..) :- qqqqqq, r(..) .

4: r(..) :- wwwwwww .

Se r(..) da linha 1 for satisfeita o Prolog continua, ser(..) da linha 2 ....se r(..) da linha 3 ...

Page 18: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Conta ocorrencias...

1: r(..) :- xxxxx ,!.

2: r(..) :- zzzzz .

3: r(..) :- qqqqqq .

4: r(..) :- wwwwwww .

Se r(..) da linha 1 for satisfeita o prolog para de procurarnovos matchings.

Page 19: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Conta ocorrencias...

conta(_,[],N) :- N is 0.

conta(X,[H|T],N) :-

X=H,conta(X,T,N1),N is N1 +1,!;

conta(X,T,N1),N is N1.

Agora voces podem tirar as respostas parciais docontaVogal.(quem ja entregou...OK!)

Page 20: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

contaVogal

contaVogal([a,b,c],N).

contaVogal(L,2).

Page 21: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

contaVogal

contaVogal(L,2).

[a,a]

??

Page 22: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

contaVogal

contaVogal([b,X,c],1).

X=a

X=e

...

Page 23: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Verificar se os 2 primeiros itens de uma

lista sao iguais

dupp([H|T],[H,H|T]).

?- dupp([a,b],[a,a,b]).

True

Page 24: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Duplicar o primeiro item de uma lista

Como??

Page 25: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Duplicar o primeiro item de uma lista

dupp([H|T],[H,H|T]).

?- dupp([a,b],[a,a,b]).

True

?- dupp([a,b],X).

X=[a,a,b]

Page 26: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Duplicar os itens de uma lista

dup([],[]).

dup([H|To],[H,H|Td]) :- dup(To,Td).

Page 27: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Mais uma duplicacao (condicional) de itens

dup([],[]).

dup([H|To],[H,H|Td]) :- H=b,dup(To,Td),!.

dup([H|To],[H|Td]) :- dup(To,Td).

Page 28: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Mais uma duplicacao de um determinado

item

dup([],[],D).

dup([H|To],[H,H|Td],D) :- H=D,dup(To,Td,D),!.

dup([H|To],[H|Td],D) :- dup(To,Td,D).

Page 29: PL-9 Laboratorio Entregas Programa˘c~ao L ogica Aula 9sendin/Cursos/PL/2S2019/aula9.pdf · PL-9 Ivan Sendin Laboratorio Entregas Prolog A magica do Prolog Programa˘c~ao L ogica

PL-9

Ivan Sendin

Laboratorio

Entregas

Prolog

A magica doProlog

Exercicios

1 Duplicar as vogais de uma lista

2 Duplicar as consoantes de uma lista (dica!)

3 Dada uma lista de pares, determine o somatorio domaior elemento do par:somamaior(X , [[1, 2], [3, 1], [4, 2]]) X = 9