Basically I am attempting to have an AI agent navigate a world based on given percepts. My issue is handling how the agent moves. Basically, I have created find_action/4 such that we pass in the percepts, action, current cell, and the direction the agent is facing. As it stands the entire code looks like: http://wesnoth.pastebin.com/kdNvzZ6Y
My issue is mainly with lines 102 to 106. Basically, in it's current form the code does not work and the find_action is skipped even when the agent is in fact facing right (I have verified this). This broken code is as follows:
% If we are headed right, take a left turn
find_action([_, _, _, _, _], Action, _, right) :-
retractall(facing(_)),
assert(facing(up)),
Action = turnleft .
However, after some experimentation I have concluded that the following works:
% If we are headed right, take a left turn
find_action([_, _, _, _, _], Action, _, _) :-
facing(right),
retractall(facing(_)),
assert(facing(up)),
Action = turnleft .
I am not entire sure why this is. I've attempted to create several identical find_action's as well, each checking a different direction using the facing(_) format, however swipl does not like this and throws an error.
Any help would be greatly appreciated.