1

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

谢谢。

4

1 回答 1

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].
于 2013-02-17T21:38:55.550 回答