Bonjour,
Je suis en train d'apprendre le Prolog dans mon cours d'IA et on a l'exercice du singe et des bananes à faire, mais l'énoncé est un peu différent de ceux que j'ai pu voir sur le net.
En gros il faut qu'on ait :
- Un prédicat p(X, Y, Z, S), où S est l'état courant, X la position du singe, Y la position des bananes et Z la position de la chaise
- Si on est à l'état S et le singe en X, alors le singe peut se déplacer de de X à Y et l'état devient marche(X, Y, S)
- Si on est à l'état S et que le singe et la chaise sont en X, le singe peut pousser la chaise de X à Y et l'état devient pousse(X, Y, S)
- Si on est à l'état S et que le singe et la chaise sont en X, le singe peut monter sur la chaise et l'état devient monte(S)
- Et pour finir rejoint(saisi(monte(S))) est le prédicat qui affirme que dans l'état monte(S) le singe peut saisir les bananes si le singe, la chaise et les bananes sont tous à la même position
- Au départ on est à l'état i, le singe est en a, les bananes en b et la chaise en c
- La requête rejoint(X) devrait retourner l'ensemble des étapes pour arriver à la solution, dans la variable X
Donc voilà ce que j'ai fait à partir de ma compréhension de l'énoncé:
Bien sur ça marche pas, mais j'arrive pas trop à comprendre le pourquoi du comment et surtout quelle étape j'ai loupé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 p(a, b, c, i). p(Y, A, B, marche(X, Y, S)) :- p(X, A, B, S). p(X, A, Y, pousse(X, Y, S)) :- p(X, A, X, S). p(X, A, X, monte(S)) :- p(X, A, X, S). rejoint(saisi(monte(S))) :- p(X, X, X, monte(S)).
Merci d'avance pour votre aide.
Partager