road(london, paris, 135).
road(paris, london, 135).
road(paris, madrid, 250).
road(madrid, paris, 250).
road(madrid, barcelona, 70).
road(barcelona, madrid, 70).
route(X, Y, [X|Y], N) :-
road(X, Y, N).
route(X, Y, [X|T], N) :-
road(X, Z, A),
route(Z, Y, [_|T], B),
N is A + B.
Это пример кода проблемы, с которой я столкнулся. Мой тестовый ввод
?- route(london, barcelona, R, 455).
Этот вход будет повторяться через лондон-париж и париж-лондон, однако я заметил, что он найдет маршрут из лондон-барселона, если я удалю цикл париж-лондон.
Мой вопрос в том, могу ли я каким-либо образом реализовать предикат, который позволит мне игнорировать цикл.
memberchk/2
и другой аргумент, чтобы убедиться, что вы не рассматриваете место, которое уже использовали. - person Daniel Lyons   schedule 14.12.2015route(X, Y, [X|Y], N) :- road(X, Y, N).
определенно неверно: Y — это атом, а не список - person CapelliC   schedule 14.12.2015