Agradeço comentários, sugestões ou correcções. O meu endereço de correio electrónico é < delfim@mat.ua.pt > . Desde já obrigado.
?- 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
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á:
|
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!