Не могли бы вы помочь мне преобразовать приведенный ниже код в код, использующий цикл, управляемый сбоями (без использования рекурсии)?
Я кодировал простой цикл, управляемый ошибками, который печатает элементы в списке без рекурсивного кода.
print_path(List) :- member(X, List), write(X), fail.
print_path(_).
Теперь мне интересно, можно ли также реализовать BFS без рекурсивного кода и кодировать впохожим образом, но это просто заканчивается как ложное.Буду признателен, если вы дадите мне знать, что мне не хватает, или даже если это возможно.
BFS с рекурсивным кодом успешно работает.
% terminate when reached a goal.
dfs([Goal|Path]).
% find a goal state recursively keeping track of a non-visited path.
dfs([State|Path]) :-
move(State, Next),
not(member(Next, Path)),
dfs([Next, State|Path]).
BFS с циклом сбоя, который у меня естьпроблема с.
dfs(Start):-
path(Start),
dfs1([Start]).
% terminate when reached a goal.
dfs1([Goal|Path]).
% find a goal state recursively keeping track of a non-visited path.
dfs1([State|Path]) :-
move(State, Next),
not(member(Next, Path)),
assert(path([Next, State|Path])),fail.
[Обновление]: Обратите внимание, что я не могу добавить комментарий, потому что у меня нет 50 репутаций как нового пользователя.Что я хочу, так это возможные пути решения известной проблемы фермера, поэтому начальное состояние - [e, e, e, e], а целевое состояние - [w, w, w, w], которое необходимо переместить вперед с помощью move / 2.,Я не знаю об итеративном углублении, так как я все еще начинающий, поэтому подробное объяснение или пример кода очень ценятся :) Спасибо.