Как искать в списке списков внутри факта? - PullRequest
0 голосов
/ 27 ноября 2018

Допустим, у меня есть эта база знаний:

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.

Очевидно, что последний код работал, когда все былоопределяется как отдельный факт, сейчас мне нужна идея, начальная точка, как я могу начать искать путь и манипулировать этим списком списка?Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...