Aula 14

Prolog

prolog interativo online

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.

Author: Jacques Wainer

Created: 2018-04-11 Wed 11:29

Validate