繁体   English   中英

Prolog - 更新列表列表中的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM