Допустим, у меня есть эта база знаний:
flight(houston,[[dallas,5],[elpaso,6]]).
flight(dallas,[[elpaso,5],[waco,7]]).
flight(elpaso,[[houston,6],[waco,8],[amarillo,9]]).
flight(waco,[[houston,10],[amarillo,3]]).
flight(amarillo,[[elpaso,9],[waco,3]]).
Я хочу знать, как добраться из города X в город Y, прежде чем у меня была база знаний, определенная как один факт, например,flight(houston,dallas,5)
, houston
- пункт отправления и dallas
пункт назначения, последний параметр, представляющий расстояние и т. Д. Со всеми другими городами и с кем они связаны, но мне пришлось изменить его на факт сзначение и список списка, и моя проблема в том, что я действительно не знаю, как пройти через него, в основном мой код для поиска маршрута был:
thereisflight(X,Y,D) :-
flight(X,Y,D).
flightR(A,B,FlightRoute,Distance) :-
travel(A,B,[A],Q,Distance),
reverse(Q,FlightRoute).
travel(A,B,P,[B|P],Distance) :-
thereisflight(A,B,Distance).
travel(A,B,Visited,FlightRoute,Distance) :-
thereisflight(A,C,Distance1),
C \== B,
\+member(C,Visited),
travel(C,B,[C|Visited],FlightRoute,Distance2),
Dist is Distance1+Distance2.
Очевидно, что последний код работал, когда все былоопределяется как отдельный факт, сейчас мне нужна идея, начальная точка, как я могу начать искать путь и манипулировать этим списком списка?Заранее спасибо.