如何更新 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)
函数,看看它们是否一起做你想做的事需要。
在 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)
函数,看看它们是否一起做你想做的事需要。