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

时间:2013-02-17 21:10:33

标签: list prolog

我是Prolog的新手,希望这是一件简单的事情。我想根据相对于列表中其他项目的一些事实在列表中的某处添加项目。例如,“X服务在Y之后的某个时间启动”但您知道X不是最后一个要运行的服务。这些信息很少有很多,最终列表会找出顺序。就在现在,我想知道如何输入项目“之后”或“之前”某个其他项目。作为一种规则的形式。

感谢。

1 个答案:

答案 0 :(得分:1)

当然,很大程度上取决于你的程序结构。

假设您有一个数据库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].