По сути, я пытаюсь заставить агента ИИ ориентироваться в мире, основываясь на данных восприятиях. Моя проблема связана с тем, как агент движется. По сути, я создал find_action / 4 таким образом, чтобы мы передавали восприятие, действие, текущую ячейку и направление, в котором находится агент. В нынешнем виде весь код выглядит так: http://wesnoth.pastebin.com/kdNvzZ6Y
Моя проблема в основном связана со строками 102–106. По сути, в его текущей форме код не работает, а команда find_action пропускается, даже если агент фактически обращен вправо (я это подтвердил). Этот сломанный код выглядит следующим образом:
% If we are headed right, take a left turn
find_action([_, _, _, _, _], Action, _, right) :-
retractall(facing(_)),
assert(facing(up)),
Action = turnleft .
Однако после некоторых экспериментов я пришел к выводу, что работает следующее:
% If we are headed right, take a left turn
find_action([_, _, _, _, _], Action, _, _) :-
facing(right),
retractall(facing(_)),
assert(facing(up)),
Action = turnleft .
Я не совсем уверен, почему это так. Я также попытался создать несколько идентичных find_action, каждый из которых проверял разное направление, используя формат facing (_), однако swipl это не понравилось и выдает ошибку.