Чтобы имя атома начиналось с буквы верхнего регистра, используйте одинарные кавычки : traject('London', 'Paris', train)
.
Я предпочитаю использовать короткие, наводящие имена переменных в коде, что делает его легче отслеживать умственно и визуально (YMMV конечно):
connect(D,A):- traject(D,A,T).
Позже вы говорите, что вы хотите увидеть транспорт, так почему вы игнорируете его здесь? Измените это на
connect(D,A,T):- traject(D,A,T).
connect(D,A,T):- traject(D,X,T1), traject(X,A,T2).
У вас есть два транспорта сейчас, во втором случае. Объедините их вместе как-нибудь! Подсказка: какие данные могут содержать как две записи, так и одну запись? Вам также придется изменить первое предложение, чтобы оно было последовательным.
Теперь новая проблема: вы игнорируете путевую точку, X
. Другой, связанный с тем, что вы только делаете две ноги в своем путешествии, но что, если вам нужно три или больше?
Рекурсия поможет решить обе эти проблемы:
connect(D,A, Xs,Ts):- traject(D,A,T), Xs = ... , Ts = ... .
connect(D,A, Xs,Ts):- traject(D,X,T),
connect(X,A, Xs2,Ts2), % <---- recursion!
Xs = ... ,
Ts = ... .
Вместо ...
, то толковое должно появиться. connect(D,A, Xs,Ts)
средства, D
eparture и A
rrival соединены путевых точек Xs
, используя виды транспорта Ts
. Так что, если D
и A
напрямую связаны только одним traject(D,A,Transport)
дуга, какой список путевых точек? Каков список видов транспорта? --- В противном случае, если мы можем перейти от D
к X
в один шаг, используя вид транспорта T
и X
и A
связаны со списком точек Xs2
с использованием различных типов транспортных Ts2
, что полный список путевых точек? Каков полный список видов транспорта?
Когда вы закончите это, вы сможете легко определить два предиката, о которых вы просите, так как информация уже существует, в этом предикате connect/4
(.../4
означает, что у него есть 4 аргумента).
Пролог атомов необходимо начинать с буквы в нижнем регистре. 'traject (Лондон, Париж, поезд).' То же, что и 'traject (_, _, train).' – dasblinkenlight
Вы должны попытаться решить эту проблему самостоятельно, это не слишком сложно. – dasblinkenlight