Exercício Prolog
Profa. Responsável: Andréia Gentil Bonfante
1. Traduza as seguintes sentenças para Prolog “ Tweety é um pássaro. Goldie é um peixe. Squiggly é uma minhoca. Pássaros gostam de minhoca. Gatos gostam de peixe. Gatos gostam de pássaros. Amigos se gostam. Meu gato é meu amigo. Meu gato come tudo o que ele gosta.”
(a) Use Prolog para determinar o que meu gato come.
passaro(tweety). peixe(goldie). minhoca(squiggly). gato(felix). pessoa(eu). gostar(X,Y):-gato(X),peixe(Y). gostar(X,Y):-gato(X),passaro(Y). gostar(X,Y):-passaro(X),minhoca(Y). amigos(X,Y):-gostar(X,Y),gostar(Y,X),X\==Y. amigos(X,Y):-pessoa(X),gato(Y). comer(X,Y):-gato(X), gostar(X,Y),not(pessoa(Y)).
(b) A resposta é razoável? Se não for, verifique se o problema está na especificação original ou na sua tradução para Prolog, corrija e execute novamente.
A interpretação inicial era de que o gato deveria comer o amigo, pois ele ‘come tudo que gosta’ segundo a especificação. Com a alteração no código excluindo-se pessoa do predicado comer, o problema foi resolvido.
2. Um estudante acostumado a usar linguagens procedimentais está desenvolvendo um compilador em Prolog. Uma das tarefas consiste em traduzir um código de erro para uma pseudo-descrição em português. O código por ele usado é:
traduza(Codigo,Significado) :- Codigo=1, Significado=integer_overflow. traduza(Codigo,Significado) :- Codigo=2, Significado=divisao_por_zero. traduza(Codigo,Significado) :- Codigo=3, Significado=id_desconhecido.
Esta é uma forma não apropriada de programar em Prolog. Melhore este código.
codigo(1,integer_overflow). codigo(2,divisao_por_zero). codigo(3,id_desconhecido). traduza(X,Y):-codigo(X,Y). 3. Considere uma base de dados que contém informações sobre diversos modelos de caixas d’água, na seguinte forma
caixa(Modelo, [Altura, Largura, Profundidade] ).
Desenvolva os seguintes programas
volume(Mod, Vol):- ... que dá o volume