Как ни странно, я недавно реализовал BFS в Прологе. Я нигде не публиковал код, и я не решаюсь сделать это, потому что это переопределение назначения, которое, вероятно, будет использовано повторно.
Я могу дать вам фактическое определение BFS:
% performs a BFS, with the given goal and queue
bfs( Goal, [[Goal|[Path]]|_], Path ).
bfs( Goal, [State|Rest], Result ) :-
successors_list( State, Successors ),
remove_seen( Successors, NewStates ),
add_to_seen( NewStates ),
append( Rest, NewStates, Queue ),
bfs( Goal, Queue, Result ).
Для этой задачи «Цель» - это конкретное число, а «Путь» - последовательность действий, необходимых для достижения этой цели. Второй параметр - это очередь, в которой каждое состояние представлено в виде списка из двух элементов (первый - это текущий номер, а второй - путь, необходимый для генерации этого номера). Возвращает путь, необходимый для получения заданного числа в «Пути». Множество видимых состояний было записано в самой базе данных с использованием утверждений.
За пределами этого определения все зависит от конкретной проблемы.
EDIT:
Я должен был сказать, что в большинстве случаев все зависит от конкретной проблемы. Я пересмотрел свой код, сделал несколько незначительных правок и изменил решаемую проблему. Это значительно отличается от задания, поэтому я чувствую себя комфортно, публикуя его, поэтому вот оно: BFS в Прологе (AI)