Guião para a Terceira Aula Prática de IPL

Delfim F. Marado Torres

17 de Março de 1999

Agradeço comentários, sugestões ou correcções. O meu endereço de correio electrónico é < delfim@mat.ua.pt > . Desde já obrigado.

1  Objectivos da aula

2  Aritmética - Exemplos

         ?- X = 1+2.
         X = 1+2

         ?- X is 1+2.
         X = 3

         ?- X is 3/2, Y is 3 // 2.
         X = 1.5
         Y = 1

         ?- 277 * 37 > 10000.
         yes

         ?- 1+2 = 2+1.
         no

         ?- 1+2 =:= 2+1.
         yes

         ?- 1+A = B+2.
         A=2
         B=1

3  Problema do macaco e das bananas

Um macaco está à porta duma sala. No centro da sala está uma banana pendurada no tecto. O macaco está com fome e quer a banana, mas não consegue chegar à altura a que esta está. Junto à janela da sala está uma caixa que pode ser usada pelo macaco e que o pode ajudar a chegar à altura a que está a banana.

O macaco pode realizar as seguintes acções: andar no chão; subir para cima da caixa; empurrar a caixa para qualquer ponto da sala; apanhar a banana (se subir para cima da caixa estando no centro da sala).

Pergunta: o macaco pode apanhar a banana, ou estará condenado a passar fome?

Resolução:

Em cada instante, vamos descrever a situação do nosso ``jogo'' através:

O objectivo do jogo será:

situacao( _,_,_,tem_banana) .

As acções permitidas, que fazem passar de uma situação a outra, são:

No entanto, cada acção só é permitida em certas situações.

         % ficheiro macaco.pl

         accao(situacao(centro,cima_caixa,centro,nao_tem),
               apanhar,
               situacao(centro,cima_caixa,centro,tem)).
         accao(situacao(P,chao,P,TN),
               subir,
               situacao(P,cima_caixa,P,TN)).
         accao(situacao(P1,chao,P1,TN),
               empurrar(P1,P2),
               situacao(P2,chao,P2,TN)).
         accao(situacao(P1,chao,C,TN),
               andar(P1,P2),
               situacao(P2,chao,C,TN)).

         % cumpre_obj(S) <=> macaco pode obter banana partindo de S

         cumpre_obj(situacao(_,_,_,tem)).
         cumpre_obj(E) :-
           accao(E,A,S),
           cumpre_obj(S).

Depois de fazer o consult do ficheiro, basta perguntar ao interpretador:

         ?- cumpre_obj(situacao(porta,chao,janela,nao_tem)).
         yes

Exercício: Justifique, usando uma árvore de prova, a resposta dada pelo interpretador.

Questão: que se passa se a ordem por que aparecem as acções possíveis for alterada?

Conforme fizemos, o macaco prefere apanhar a banana, a subir a caixa, a empurrar a caixa, a movimentar-se. Se colocassemos a acção andar em primeiro lugar, o prolog nunca encontraria uma solução para a questão posta. Experimente! Note, no entanto, que a árvore de prova neste caso é precisamente a mesma!

4  Mais ideias a reter