オープン ストリートマップ プロジェクトからいくつかの事実をダウンロードしました。ここからダウンロードできますhttp://www.mediafire.com/?15pttpp847ld71x このプログラムは、ユーザーがある場所から別の場所への旅程を取得し、最短ルートを提供するのに役立ちます。パスを検索するためにダイクストラのアルゴリズムを実装する方法を誰かが教えてくれます。また、この述語を念頭に置いていました -compute_path(User, Start , End, PathNodes) ここで、User は amsterdam.pl のユーザー値と一致します運転手、 ...)。Prolog は、適切なルートを構築するときにこの情報を考慮に入れます。たとえば、サイクリストは高速道路を使用できません。· ユーザー指定の場所を明示的に訪問する出発地と到着地の間の旅程を要求できるようにします (つまり、ユーザーは A から B 経由で C に行きたいと指定できます)。· Prolog に、「午前 10 時にアムステルダムの B 地点に行くには、A 地点を何時に出発すればよいですか?」などの情報を尋ねることができるようにします。· ユーザーが次のような入力を使用してシェルと対話できるように、あなたが作成したようなヒューマン ランゲージ インターフェイスを使用します。これを実装するために、私はとても感謝しています.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').