私は Prolog を初めて使用しますが、これが簡単なことであることを願っています。リスト内の他のアイテムに関連するいくつかの事実に基づいて、リストのどこかにアイテムを追加したいと考えています。たとえば、「Y の後に X サービスが開始された」としますが、X が最後に実行されるサービスではないことがわかっています。これらの小さな情報はたくさんあり、最終的にはリストが順序を把握します。とりあえず、ある項目の「後」「前」を入力する方法が知りたいです。ルールの形として。
ありがとう。
もちろん、プログラムの構造に大きく依存します。
データベースがあるとしましょうservice(ID, StartTime)
:- dynamic service/2.
最初のリストは を使用してすぐに構築できsetof(StartTime-ID, service(ID, StartTime), List)
、要素は で追加できます
add_service([ST0-ID0|R], service(ID, ST), [ST-ID, ST0-ID0|R]) :-
ST < ST0, !.
add_service([E|R], S, [E|T]) :-
add_service(R, S, T).
add_service([], S, [S]).
このデータを使用したテスト
service(a, 10).
service(b, 5).
service(c, 20).
?- setof(StartTime-ID, service(ID, StartTime), List), add_service(List, service(z, 12), Updated).
List = [5-b, 10-a, 20-c],
Updated = [5-b, 10-a, 12-z, 20-c].