如何更新 Jess 规则引擎中的事实?

How to update facts in Jess Rules Engine?

在 Jess 中,假设我的 Factbase 由几个名称-值对组成,例如

(node1 6.5) (node2 100) (node3 0.5)

如何在不手动收回的情况下实现 "update" 值,例如 "node1" 值从 6.5 到 100?

另外,有没有办法在触发特定规则后"reassert"所有事实?

您使用 Jess 的 (modify) 功能修改事实。 As explained in the manual,像 (node1 6.5) 这样的有序事实在内部表示为具有名为 __data 的单个槽的无序事实,因此您可以利用该知识来修改它们:

Jess> (assert (node1 6.5))
<Fact-0>
Jess> (modify 0 (__data 7.5))
<Fact-0>
Jess> (facts)
f-0   (MAIN::node1 7.5)
For a total of 1 facts in module MAIN.

现在,考虑到所有这些,为了提高效率,我仍然建议您使用像

这样的无序模板
(node (slot index) (slot value))

让你的事实看起来像

(node (index 1) (value 6.5))
(node (index 2) (value 100))

关于你的最后一个问题:我不太确定你的意思,但你可以查看 (deffacts) 构造和 (reset) 函数,看看它们是否一起做你想做的事需要。