У меня есть предикат, который двунаправлен и говорит, подключен ли один узел к другому. .Список всех достижимых узлов
has(a, b).
has(b, c).
has(d, b).
Теперь я хотел бы перечислить все узлы, которые могут быть достигнуты (с определенного узла) с заданным количеством шагов.
connected_nodes(a, T, 2).
должен поэтому выход
T = c
T = d
Мой текущий код выглядит следующим образом:
connected_nodes(A, B, 0) :- write(A).
connected_nodes(A, B, N) :-
N > 0, M is N - 1,
has(A, X),
connected_nodes(X, B, M).
Это работает для Т = с, но не при Т = д, так как это би- направленное отношение.
Я правильно думаю о рекурсии или о том, как решить эту проблему другим способом?
Вы хотите включить циклы или нет? – false