[英]Prolog - Update a value in list of list
我有一个事实:
available_resources([[r1, 0], [r2, 0]]).
我需要在指定条件为真时将零增加 1 。 喜欢:
release(X):-
allocated(X , R1):-
increase r1 by one
我不知道如何更新一个事实。
你问的是“可变状态”。 与函数式语言(即 LISP 等)一样,这在 Prolog 中更难实现! (有关 Clojure 上下文中的功能视图,请参阅Values and Change: Clojure's approach to Identity and State )
您可以做的是为“时间”指定一个特定的值。 然后你可以在Prolog 数据库中拥有如下事实:
available_resources(10, [this, and, that]).
available_resources(20, [hither, and, yon]).
这里我们声明,在时间 10 时,资源是[this, and, that]
,而在时间 20 时,资源是[hither, and, yon]
。
然后您可以使用assertz向数据库添加事实并撤回以删除旧事实。
release(X) :- available_resources(Tprev, Rprev),
compute_new_resource_term(X,Rprev,Rcur),
% get current time from an extralogical oracle
get_time(Tcur),
retract(available_resources(Tprev, Rprev)),
assertz(available_resources(Tcur,Rcur)).
但是,如果您不需要让“资源”项在程序运行中保留下来(即通过返回到顶层),您只需构造新项并将它们从谓词传递到谓词,而无需将它们存储在数据库中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.