Fondamentalement, je tente d'avoir un agent d'IA naviguer dans un monde basé sur des percepts donnés. Mon problème est de savoir comment l'agent se déplace. Fondamentalement, j'ai créé find_action/4 de telle sorte que nous passions aux percepts, à l'action, à la cellule courante et à la direction de l'agent. Le code entier ressemble à: http://wesnoth.pastebin.com/kdNvzZ6YProlog: N'exécutant pas le code comme prévu
Mon problème concerne principalement les lignes 102 à 106. Fondamentalement, dans sa forme actuelle, le code ne fonctionne pas et la fonction find_action est ignorée même lorsque l'agent est en fait orienté vers la droite (J'ai vérifié ceci). Ce code est cassé comme suit:
% If we are headed right, take a left turn
find_action([_, _, _, _, _], Action, _, right) :-
retractall(facing(_)),
assert(facing(up)),
Action = turnleft .
Cependant, après quelques essais, je conclus que les travaux suivants:
% If we are headed right, take a left turn
find_action([_, _, _, _, _], Action, _, _) :-
facing(right),
retractall(facing(_)),
assert(facing(up)),
Action = turnleft .
Je ne suis pas sûr tout le pourquoi. J'ai aussi essayé de créer plusieurs find_action identiques, chacune vérifiant une direction différente en utilisant le format facing (_), mais swipl n'aime pas ça et lance une erreur.