Может ли этот поиск в глубину быть закодирован с помощью цикла с ошибкой без рекурсии? - PullRequest
0 голосов
/ 18 февраля 2019

Не могли бы вы помочь мне преобразовать приведенный ниже код в код, использующий цикл, управляемый сбоями (без использования рекурсии)?

Я кодировал простой цикл, управляемый ошибками, который печатает элементы в списке без рекурсивного кода.

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.,Я не знаю об итеративном углублении, так как я все еще начинающий, поэтому подробное объяснение или пример кода очень ценятся :) Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...