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!