pl-9 laboratorio entregas programa˘c~ao l ogica aula 9sendin/cursos/pl/2s2019/aula9.pdf · pl-9...
Post on 16-Apr-2020
6 Views
Preview:
TRANSCRIPT
PL-9
Ivan Sendin
Laboratorio
Entregas
Prolog
A magica doProlog
Programacao Logica
Aula 9
Ivan Sendin
FACOM - Universidade Federal de Uberlandiasendin@ufu.br
9 de setembro de 2019
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.
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
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!
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)
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)
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
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!!
PL-9
Ivan Sendin
Laboratorio
Entregas
Prolog
A magica doProlog Como construir um predio de 50 andares??
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
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!!
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.
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...
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
...
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.
PL-9
Ivan Sendin
Laboratorio
Entregas
Prolog
A magica doProlog
! elimina a tentativa do Prolog de tentarre-satisfazer um objetivo
cut
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 ...
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.
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!)
PL-9
Ivan Sendin
Laboratorio
Entregas
Prolog
A magica doProlog
contaVogal
contaVogal([a,b,c],N).
contaVogal(L,2).
PL-9
Ivan Sendin
Laboratorio
Entregas
Prolog
A magica doProlog
contaVogal
contaVogal(L,2).
[a,a]
??
PL-9
Ivan Sendin
Laboratorio
Entregas
Prolog
A magica doProlog
contaVogal
contaVogal([b,X,c],1).
X=a
X=e
...
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
PL-9
Ivan Sendin
Laboratorio
Entregas
Prolog
A magica doProlog
Duplicar o primeiro item de uma lista
Como??
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]
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).
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).
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).
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
top related