Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · •...
Transcript of Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · •...
![Page 1: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/1.jpg)
Predicados extralógicos
Prof. Elaine Faria e Hiran NonatoProgramação Lógica
UFU 2012
![Page 2: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/2.jpg)
Créditos
• O material a seguir consiste de adaptações e extensões dos originais gentilmente cedidos pelo Prof. Alexsandro Santos Soares
![Page 3: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/3.jpg)
Introdução
• Todas as implementações Prolog oferecem um certo número de predicados prédefinidos orientados a execução de rotinas que
• são necessárias com muita freqüência• são de difícil programação • se destinam a um domínio particular realçado pela
implementação
![Page 4: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/4.jpg)
Tipos de termos• Os termos Prolog podem assumir desde simples constantes até
estruturas complexas • Se um termo é uma variável, então esta pode ou não estar instanciada
em algum momento da execução do programa
• Exemplo: adicionar os valores de duas variáveis, X e Y, por meio deZ is X + Y
– Desejase verificar se as variáveis X e Y estão instanciados com valores inteiros
• Podese utilizar o predicado prédefinido integer(X), que é verdadeiro se X estiver instanciada com um valor inteiro
..., integer(X), integer(Y), Z is X + Y, ...
![Page 5: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/5.jpg)
Tipos de termos
Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997.
![Page 6: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/6.jpg)
Tipos de termos
![Page 7: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/7.jpg)
Tipos de termos
?X=1, classifica(X).Tipo Atômico:> Numero Inteiro
?X=[], classifica(X).Tipo Atômico:> Lista Vazia
?X=tio(josé), classifica(X).Termo Estruturado
![Page 8: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/8.jpg)
Construção e decomposição de termos
• Há três predicados prédefinidos para a decomposição de termos e construção de novos termos: – functor/3 – arg/3 – =../2
![Page 9: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/9.jpg)
Construção e decomposição de termos
• =../2 "univ“ (operador infixo)– O objetivo Termo =.. L é bemsucedido se L é uma lista contendo
como primeiro elemento o functor principal de Termo, seguido pelos seus argumentos.
?f(a, b) =.. L.L=[f, a, b]
?T =.. [retângulo, 3, 5].T=retângulo(3, 5)
?Z =.. [p, X, f(X, Y)].Z=p(X, f(X, Y))
![Page 10: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/10.jpg)
Construção e decomposição de termos
• functor/3functor(Termo, Functor, Aridade)
é verdadeiro se Functor é o functor principal de Termo e Aridade é o seu número de argumentos
• arg/3arg(N, Termo, Argumento)
é verdadeiro se Argumento é o Nésimo argumento em Termo
![Page 11: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/11.jpg)
Construção e decomposição de termos
• Exemplos?functor(teste(f(X), X, t), Functor, Aridade).
Functor=teste Aridade=3
?arg(2, teste(X, t(a), t(b)), Argumento).Argumento=t(a)
?functor(D, data, 3), arg(1, D, 5), arg(2, D, abril), arg(3, D, 1994).D=data(5, abril, 1994)
![Page 12: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/12.jpg)
Programas ou Bases de Dados• Modelo relacional
– uma base de dados é a especificação de um conjunto de relações
• Um programa Prolog pode ser visto como uma base de dados – A especificação das relações é parcialmente implícita (regras) e
parcialmente explícita (fatos).
![Page 13: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/13.jpg)
• Prolog possui cinco comandos básicos para a manipulação da base de dados:
– assert/1– asserta/1– assertz/1
– retract/1– retractall/1
Adicionar informação
Remover informação
Manipulação da base de dados
![Page 14: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/14.jpg)
? listing.true
Inicie com uma base de dados vazia
![Page 15: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/15.jpg)
Using assert/1
? assert(feliz(maria)).true
![Page 16: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/16.jpg)
Using assert/1
feliz(maria). ? assert(feliz(maria)).true?
![Page 17: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/17.jpg)
Using assert/1
feliz(maria). ? assert(feliz(maria)).true? listing. feliz(maria).?
![Page 18: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/18.jpg)
feliz(maria). ? assert(feliz(maria)).true? listing. feliz(maria).? assert(feliz(vicente)), assert(feliz(marcelo)), assert(feliz(bruno)),
assert(feliz(vicente)).
Using assert/1
![Page 19: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/19.jpg)
Using assert/1
feliz(maria).feliz(vicente).feliz(marcelo).feliz(bruno).feliz(vicente).
? assert(feliz(maria)).true? listing. feliz(maria).? assert(feliz(vicente)), assert(feliz(marcelo)), assert(feliz(bruno)),
assert(feliz(vicente)).true?
![Page 20: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/20.jpg)
Alterando o significado de predicados
• As manipulações na base de dados alteraram o significado do predicado feliz/1
• Mais genericamente:– Os comandos de manipulação da base de dados
nos dão a habilidade de alterar o significado dos predicados em tempo de execução.
![Page 21: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/21.jpg)
Predicados estáticos e dinâmicos
• Predicados cujo o significado se altera durante o tempo de execução são chamados de predicados dinâmicos– feliz/1 é um predicado dinâmico– Alguns interpretadores Prolog necessitam de uma
declaração de predicados dinâmicos.
• Predicados comuns são algumas vezes chamados de predicados estáticos.
![Page 22: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/22.jpg)
Inserindo regras
feliz(maria).feliz(vicente).feliz(marcelo).feliz(bruno).feliz(vicente).
? assert( (ingenuo(X): feliz(X)).
![Page 23: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/23.jpg)
feliz(maria).feliz(vicente).feliz(marcelo).feliz(bruno).feliz(vicente).
ingenuo(A): feliz(A).
? assert( (ingenuo(X): feliz(X)).true?
Inserindo regras
![Page 24: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/24.jpg)
Removendo informação
• Agora sabemos como adicionar informação à base de dados do Prolog– Fazemos isto como o predicado assert/1
• Como nós removemos informação?
![Page 25: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/25.jpg)
Removendo informação
• Agora sabemos como adicionar informação à base de dados do Prolog– Fazemos isto como o predicado assert/1
• Como nós removemos informação?– Fazemos isto como o predicado retract/1 que
removerá uma cláusula– Podemos remover muitas cláusulas
simultaneamente com o predicado retractall/1
![Page 26: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/26.jpg)
Usando retract/1
feliz(maria).feliz(vicente).feliz(marcelo).feliz(bruno).feliz(vicente).
ingenuo(A): feliz(A).
? retract(feliz(marcelo)).
![Page 27: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/27.jpg)
feliz(maria).feliz(vicente).feliz(bruno).feliz(vicente).
ingenuo(A): feliz(A).
? retract(feliz(marcelo)).true?
Usando retract/1
![Page 28: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/28.jpg)
feliz(maria).feliz(vicente).feliz(bruno).feliz(vicente).
ingenuo(A): feliz(A).
? retract(feliz(marcelo)).true? retract(feliz(vicente)).
Usando retract/1
![Page 29: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/29.jpg)
feliz(maria).feliz(bruno).feliz(vicente).
ingenuo(A): feliz(A).
? retract(feliz(marcelo)).true? retract(feliz(vicente)).true
Usando retract/1
![Page 30: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/30.jpg)
feliz(maria).feliz(bruno).feliz(vicente).
ingenuo(A): feliz(A).
? retract(feliz(X)).
Usando retract/1
![Page 31: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/31.jpg)
feliz(bruno).feliz(vicente).
ingenuo(A): feliz(A).
? retract(feliz(X)).X=maria;
Usando retract/1
![Page 32: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/32.jpg)
feliz(vicente).
ingenuo(A): feliz(A).
? retract(feliz(X)).X=maria;X=bruno;
Usando retract/1
![Page 33: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/33.jpg)
ingenuo(A): feliz(A).
? retract(feliz(X)).X=maria;X=bruno;X=vicente;
Usando retract/1
![Page 34: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/34.jpg)
ingenuo(A): feliz(A).
? retract(feliz(X)).X=maria;X=bruno;X=vicente;false?
Usando retract/1
![Page 35: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/35.jpg)
Programas ou Bases de Dados• Exemplo?crise.
false.?assert(crise).
true.?crise.
true.?retract(crise).
true.?crise.
false
![Page 36: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/36.jpg)
Programas ou Bases de Dados
bom:sol, not(chuva).
instavel:sol, chuva.
deprimente:chuva, neblina.
chuva.neblina.
?bom.false.
?deprimente.true.
?retract(neblina).true.
?deprimente.false.
?assert(sol)true.
?instavel.true.
?retract(chuva).true.
?bom.true.
![Page 37: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/37.jpg)
Programas ou Bases de Dados
• Podese especificar a posição na qual a cláusula deve ser inserida na base de dados
asserta(C)introduz a cláusula C no início da base de dados
assertz(C)adiciona a cláusula C no final da base de dados
![Page 38: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/38.jpg)
Programas ou Bases de Dados
?assert(p(a)), assertz(p(b)), asserta(p(c)).true.
?p(X).X=c;X=a;X=b;false.
![Page 39: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/39.jpg)
Programas ou Bases de Dados
• Relação entre consult/1 e assertz/1– para "consultar" um arquivo, ler cada um dos seus termos
(cláusulas) e inserilos no final da base de dados
consult(X) :open(X,read,A), read(A,C),transfere(A,C), close(A).
transfere(F,_) : at_end_of_stream(F),!.transfere(A,C) :
assertz(C), read(A,C1),transfere(A,C1).
![Page 40: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/40.jpg)
Programas ou Bases de Dados
• Em algumas implementações Prolog asserta/1, assertz/1e retract/1 só funcionam em predicados que tenham sido declarados dinâmicos– Deve aparecer antes da definição ou uso do predicado dinâmico
: dynamic Nome/Aridade.– A intenção é evitar a alteração acidental da base de
conhecimento• Exemplo:
:dynamic gosta/2.
![Page 41: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/41.jpg)
Programas ou Bases de Dados
• Uma aplicação útil do predicado asserta/1 é armazenar respostas já computadas para consultas formuladas ao programa
• Exemplo: predicado resolve(Problema, Solução)
?resolve(prob1,Sol), asserta(resolve(prob1, Sol)).Se o primeiro objetivo acima é bemsucedido, então a resposta(Solução) é armazenada e utilizada na resposta a questões futuras
![Page 42: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/42.jpg)
Programas ou Bases de Dados• Adicionar a correspondente tabela de multiplicação à base
de dados
tabMult :L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],membro(X, L), membro(Y, L),Z is X*Y, assert(produto(X, Y, Z)), fail.
tabMult.
? produto(A, B, 8).A=1 B=8; A=2 B=4; A=4 B=2; A=8 B=1; false.
![Page 43: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/43.jpg)
Programas ou Bases de Dados
• Cuidado– O uso abusivo de assertretract pode obscurecer o
significado do programa e dificultar a compreensão do que é verdadeiro e o que não é num dado instante
– O comportamento resultante do programa pode se tornar difícil de entender, de explicar e de confiar
![Page 44: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/44.jpg)
Recursos para o controle de programas
• call(P) – dispara um objetivo P. Será bemsucedido se e
somente se P também o for• repeat
– objetivo que sempre é bemsucedido. Sua principal propriedade é ser não determinístico
• toda vez que é alcançado por backtracking ele gera um caminho alternativo para a execução
repeat. repeat : repeat.
![Page 45: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/45.jpg)
Recursos para o controle de programas
• Exemplos do uso do repeatquadrado :
repeat, read(X),(X=fim, !; Y is X*X, write(Y), fail).
executa :repeat, menu(X),(X=fim, !; exec(X), fail).
![Page 46: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/46.jpg)
Bagof, Setof e Findall
• Podese gerar, através de backtracking, todos os objetos, um a um, que satisfazem algum objetivo
• Cada vez que uma nova solução é gerada, a anterior desaparece e não é mais acessível
• O que fazer quando desejase dispor de todos os objetos gerados?
![Page 47: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/47.jpg)
Bagof, Setof e Findall
bagof(X, P, L)irá produzir uma lista L de todos os objetos X que satisfazem ao objetivo P
classe(a, vog).classe(b, con).classe(c, con).classe(d, con).classe(e, vog).. . .
?bagof(Letra, classe(Letra, con), Consoantes).Consoantes=[b, c, d, ..., z]
![Page 48: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/48.jpg)
Bagof, Setof e Findall? bagof(Letra, classe(Letra, Classe), Letras).
Classe=vog, Letras=[a, e, i, o, u];Classe=con, Letras=[b, c, d, f, ..., z].
– Se não houver solução para P no objetivo bagof(X, P, L), então este falha
– Se algum objeto X é encontrado repetidamente, todas as suas ocorrências irão aparecer em L
• possibilidade de existência de elementos duplicados em L
![Page 49: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/49.jpg)
Bagof, Setof e Findall
setof(X, P, L)irá produzir uma lista L dos objetos X que satisfazem a P, sendo que a lista L estará ordenada e itens duplicados serão eliminados
?setof(Classe/Letra, classe(Letra, Classe), Letras).Letras=[con/b, con/c, ..., con/z, vog/a, ..., vog/u]
![Page 50: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/50.jpg)
Bagof, Setof e Findall
findall(X, P, L)produz a lista L de todos os objetos X que satisfazem P
• Diferença entre findall e o bagof – todos os objetos X são coletados sem considerar eventuais
soluções diferentes para as variáveis em P que não são compartilhadas com X
?findall(Letra, classe(Letra, Classe), Letras).Letras=[a, b, c, ..., z]
![Page 51: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/51.jpg)
Bagof, Setof e Findallidade(pedro,7).idade(ana,5).idade(alice,8).idade(tomaz,5).
?findall(Crianca,idade(Crianca,Idade),L).L = [pedro,ana,alice,tomaz]
?findall(Crianca/Idade,idade(Crianca,Idade),L).L = [pedro/7, ana/5, alice/8, tomaz/5]
?findall(Crianca/Idade, (idade(Crianca,Idade),Idade>5),L).L = [pedro/7, alice/8]
![Page 52: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/52.jpg)
Bagof, Setof e Findall
• Se não há nenhum objeto X que satisfaça P, então o predicado findall(X, P, L) resulta bemsucedido com L=[]
![Page 53: Predicados extralógicos - facom.ufu.bralbertini/2sem2012/curso-prolog/slides/aula11.pdf · • Podese utilizar o predicado prédefinido integer(X) , que ... A=1 B=8; A=2 B=4; A=4](https://reader031.fdocumentos.com/reader031/viewer/2022022108/5c0436dd09d3f28b388b511f/html5/thumbnails/53.jpg)
Referências
• Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997.
• Slides da Profa Solange – ICMCUSP – Inteligência Artificial