Я скачал некоторые факты из открытого проекта StreetMap, вы можете скачать его здесь http://www.mediafire.com/?15pttpp847ld71x
Эта программа, которую я пытаюсь придумать, поможет пользователю получить маршрут из одного места в другое, предоставляя кратчайшие возможные маршруты, кто-то может сказать мне, как реализовать алгоритм Дейкстры для поиска путей, также у меня был этот предикат в уме -compute_path (Пользователь, Пуск , End, PathNodes) где пользователь будет соответствовать пользовательским значениям из amsterdam.pl
Я пытаюсь добавить расширения, может быть, вы можете поиграть с ним, например, следующее:
.Скажите Пролог, что я за пользователь (например, пешеход, велосипедист, водитель автомобиля, ...). Затем Пролог примет эту информацию во внимание при построении подходящего маршрута. Например, велосипедист не может использовать шоссе.
· Позволяет запросить маршрут между адресом отправления и адресом прибытия, который явно посещает ряд определенных пользователем мест (то есть пользователь может указать, что он хочет перейти от А к С через В).
· Позволить запрашивать у Пролога такую информацию, как «В какое время я должен покинуть пункт А, чтобы добраться до пункта В, Амстердам, в 10:00?».
Используйте интерфейс на человеческом языке, подобный тому, который вы только что сделали, чтобы пользователь мог взаимодействовать с оболочкой, используя
ввод, как:
o как мне добраться от "NameA", Амстердам до "NameB", Амстердам
Пожалуйста, вернитесь ко мне, если вы смогли реализовать это, я буду очень признателен, я новичок в Прологе и пытаюсь быстро учиться.
это код, который я пытался придумать
:-dynamic(node/3).
:-dynamic(way/2).
% some nodes
node(46315543, 52.35548, 4.84315).
node(46315968, 52.35558, 4.84068).
node(46315971, 52.35531, 4.84986).
% predicate to add a node to a way
add_node_to_way(WayID, NodeID) :-
way(WayID, NodeList),
node(NodeID, _, _),
not(member(NodeID, NodeList)),
retract(way(WayID, NodeList)),
append(NodeList, [NodeID], NewNodeList),
assert(way(WayID, NewNodeList)).
% main menu
menu :-
write('1. list nodes\n'),
write('2. list ways\n'),
write('3. create node\n'),
write('4. create way\n'),
write('5. add node to way\n'),
write('6. exit\n'),
nl,
write('your option: '),
read(Option),
process(Option).
menu :-
menu.
process(1) :-
node(ID, Lat, Long),
writef('node with ID = %d, lat = %d and long = %d\n', [ID, Lat, Long]),
fail.
process(2) :-
way(ID, NodeList),
writef('way with ID = %d and nodelist = ', [ID, NodeList]),
write(NodeList),
nl,
fail.
process(3) :-
write('enter node ID: '),
read(ID),
not(node(ID, _, _)),
write('enter lat: '),
read(Lat),
write('enter long: '),
read(Long),
assert(node(ID, Lat, Long)),
fail.
process(4) :-
write('enter way ID: '),
read(ID),
not(way(ID, _)),
assert(way(ID, [])),
fail.
process(5) :-
write('enter ID of node to add: '),
read(NodeID),
node(NodeID, _, _),
write('enter ID of way to add to: '),
read(WayID),
way(WayID, _),
add_node_to_way(WayID, NodeID),
fail.
process(6) :-
% exit point
write('bye').