List 将项目添加到Prolog中相对于列表中其他项目的列表中

List 将项目添加到Prolog中相对于列表中其他项目的列表中,list,prolog,List,Prolog,我不熟悉Prolog,希望这是一件简单的事情。我想根据与列表中其他项目相关的一些事实,在列表中的某个位置添加一个项目。例如,“X服务在Y之后的某个时间启动”,但您知道X不是最后一个运行的服务。这里有很多这样的信息简介,最终列表将确定顺序。就目前而言,我想知道如何在某个其他项目的“之后”或“之前”输入该项目。作为规则的一种形式 谢谢。当然,这在很大程度上取决于程序的结构 假设您有一个数据库服务(ID,StartTime) 可以使用setof(StartTime ID,service(ID,Star

我不熟悉Prolog,希望这是一件简单的事情。我想根据与列表中其他项目相关的一些事实,在列表中的某个位置添加一个项目。例如,“X服务在Y之后的某个时间启动”,但您知道X不是最后一个运行的服务。这里有很多这样的信息简介,最终列表将确定顺序。就目前而言,我想知道如何在某个其他项目的“之后”或“之前”输入该项目。作为规则的一种形式


谢谢。

当然,这在很大程度上取决于程序的结构

假设您有一个数据库
服务(ID,StartTime)

可以使用
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]).

当然,这在很大程度上取决于程序的结构

假设您有一个数据库
服务(ID,StartTime)

可以使用
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].