Пример базы данных:
any(a,b,2).
any(b,c,2).
any(c,d,3).
any(d,e,1).
any(e,f,3).
Ключ: (Station1,Station2,Time)
.
Вопрос:
введите (station1,time)
в пролог и верните все станции в пределах досягаемости.
Например:
Если вы введете: (b,2)
.
Выходные данные должны быть: 'a' и 'c'
Это потому, что со станции 'b' за '2' минуты вы сможете добраться до станций 'a' и 'c', поскольку они находятся в пределах досягаемости от введенного времени.
Я устал от использования списков и рекурсии, но не повезло, какая-либо помощь / предложения?
reachable(Station1, Limit, Result) :-
reachable(Station1, Limit, 0, 0, Result).
reachable(Station1, Visited, TimeSpent, Limit, Result) :-
overground(Station1,Station2,Time),
Visited is Limit - Time,
Limit =< TimeSpent,
Result = [Station2];
overground(Station1, Waypoint, Time),
NewVisited is Visited - Limit,
NewTimeSpent is TimeSpent - NewVisited,
reachable(Waypoint,Station2, NewTimeSpent, NewVisited,Result).
<<< что-то, что я пробовал, но, похоже, не работает X_X </p>