Одна часть программы, которую я пишу на Прологе, связана с поиском всех возможных вариантов пути от начальной точки до конечной точки.
Вот что у меня есть на данный момент:
findAllRoutes(Start, End, Path) :-
findAllRoutes(Start, _, End, Path),
print('Successful route: '), print(Route).
findAllRoutes(End, _, End, [End]). %route was successfully finished
findAllRoutes(Start, Temp, End, [Start|Rest_of_List]) :-
path(Start, Temp),
findAllRoutes(Temp, _, End, Rest).
Вот данные для чтения:
%path(Start, End).
path(1, 4). %find all the possible paths from location 1 to location 4.
%paths_in_place[[Start, End, Distance]].
paths_in_place[[1, 2, 250], [2, 4, 250], [1, 3, 400], [3, 4, 300]].
Мой вопрос: является ли это точным способом циклического перехода через paths_in_place
, сохраняя при этом порядок точек, достигнутых на пути от начальной точки до конечной точки?
Кроме того, что происходит с Distance
, когда findAllRoutes
вызывается без какого-либо упоминания поля Distance
? Законно ли в Прологе передавать параметры Start, End, Route
, даже если в paths_in_place
поля равны Start, End, Distance
?
Любая помощь очень ценится. Дайте мне знать, если мне нужно что-то уточнить.