Prolog: Not executing code as expected.

Posted by Louis on Stack Overflow See other posts from Stack Overflow or by Louis
Published on 2010-04-06T07:07:08Z Indexed on 2010/04/06 7:13 UTC
Read the original article Hit count: 318

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.

© Stack Overflow or respective owner

Related posts about swi-prolog

Related posts about prolog