Aula 14
Prolog
1 estruturas
estudante(1234,[3,6,7,7])
estudante é o functor 1234 e ,[3,6,7,7] sao os argumentos da estrutura
unificação funciona com estruturas: mesmo functor, mesmo numero de argumentos e recursivamente cada argumento deve unificar com o seu correspondente
a(X,5) = a(8,Z)
unifica e X=8 e Z=5.
2 Arvores
vazia arv(No,ArvoreEsquerda,ArvoreDireira)
findABB(arv(No,_,_),No). findABB(arv(No,AE,_),Item) :- Item < No,!, find(AE,It). findABB(arv(No,_,AD), Item :- find(AD, Item)
insereABB(vazia,I,arv(I,vazia,vazia)). insereABB(arv(I,AE,AD),I,arv(I,AE,AD)). insereABB(arv(No,AE,AD),I, NovaARV) :- I<No,!, insereABB(AE,I,NovaAE), NovaARV = arv(No,NovaAE,AD). insereABB(arv(No,AE,AD),I, NovaARV) :- insereABB(AD,I,NovaAD), NovaARV = arv(No,AE,NovaAD).
3 Exercicios
(Copiado dos exercicios de Lisp - converta o problema para Prolog - o predicado retorna o valor computado numa variavel argumento (modo -) ).
- retorne o número de nos de uma arvore (modo +-)
- retorne a profundidade máxima de uma arvore
- dado uma arvore, gere uma lista com todos nós na ordem infixa (lado-esquerdo no lado-direito)
- gere uma lista dos nos na ordem prefixa (no esq dir)
- escreva um predicado que da certo se seu argumento é uma ABB (modo +)
- dado uma arvore de busca binaria e um item, verifique se o item esta na arvore
- dado uma abb e um item, retorne a arvore com o item inserido
- dado uma abb e um item, retorne a arvore sem o item
- escreva um predicado que dado uma arvore dá certo se a arvore é uma AVL (modo +).
4 Dicionários
Vamos implementar um dicionário como sendo uma ABB (melhor ainda se fosse uma AVL)
arv(CHAVE,VALOR,AE,AD)
implemente os predicados
- get(DIC, CHAVE, VALOR) modo (+ + -) obtem o valor associado a chave no DIC, ou falha se a chave nao tiver armazenada
- set(DIC, CHAVE, VALOR, NOVODIC) modo (+ + + -) insere chave/valor no DIC e obtem NOVODIC, Se chave ja existe troque o valor
- rem1(DIC, CHAVE, NOVODIC) remove chave do DIC, falha se a chave nao estiver la.
- rem2(DIC, CHAVE, NOVODIC) remove chave do DIC, NOVODIC = DIC se a chave nao estiver la.
5 Construindo estruturas em tempo de execucao
Estru =.. Lista X =.. [a,2,c,5]. X = a(2,c,5)
proxima aula - predicados como argumento de predicados e convertendo estruturas e fatos e objetivos.