У меня возникли проблемы со следующей проблемой в Prolog, например, у меня есть несколько фактов в базе знаний:
flight(rome,london,ba,1500,150,400).
flight(london,newyork,airfrance,600,60,200).
flight(rome,paris,airfrance,1200,120,500).
flight(paris,newyork,airfrance,600,60,200).
flight(newyork,london,ba,1500,240,300).
Меня интересует только получение списка всех возможных маршрутов из X в Y. Я понимаю, что должен использовать рекурсивное правило и что я должен добавить посещенные места в список, чтобы остановить цикл, повторяющийся снова и снова, поскольку пути полета в базе знаний есть несколько циклов.
что у меня есть до сих пор:
flight_route(X,Y):-
flight(X,Y,A,B,C,D).
trip(X,X,[]).
trip(X,Z,T) :-
flight_route(Y,Z),
not(member(Y,T)),
trip(X,Y,[Y|T]).
по какой-то причине, когда я смотрю на трассировку, правило не работает, когда оно пытается проверить, что не (член (Y, T)) но я не могу понять, почему это так.