我从 open streetmap 项目下载了一些事实,你可以在这里下载http://www.mediafire.com/?15pttpp847ld71x 我试图提出的这个程序将帮助用户获得从一个地方到另一个地方的行程,提供最短的路线,有人可以告诉我如何实现 Dijkstra 的算法来搜索路径,我也有这个谓词 -compute_path(User, Start , End, PathNodes) 其中 User 将与 amsterdam.pl 中的用户值保持一致 我正在尝试添加扩展名,也许您可以使用它,例如以下内容: .Tell Prolog 我是哪种用户(例如行人,骑自行车的人,汽车司机, ...)。那么 Prolog 在构建适当的路由时会考虑这些信息。例如,骑自行车的人不能使用高速公路。· 可以询问出发地和到达地之间的行程,明确访问多个用户指定的地点(即用户可以指定他想从A 经B 到C)。· 可以向 Prolog 询问诸如“我什么时候必须离开 A 点,才能在上午 10:00 到达阿姆斯特丹 B 点?”等信息。· 使用您刚刚制作的人类语言界面,以便用户可以使用以下输入与 shell 进行交互: o 我如何从阿姆斯特丹的“NameA”到“NameB”,如果您能够的话,请回复我为了实现这一点,我将非常感激,我是 Prolog 的新手,并试图成为一个快速学习者。
这是我试图想出的代码
:-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').