如何在Jess Rules Engine中更新事实?

时间:2019-09-25 09:30:40

标签: java rules jess

在杰西(Jess)中,假设我的Factbase由几个名称/值对组成,例如

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

如何在不手动收回的情况下实现将“ node1”值从6.5“更新”到100?

此外,在触发特定规则后,是否有办法“重新声明”所有事实?

1 个答案:

答案 0 :(得分:1)

您使用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)函数,看看它们是否可以满足您的需求。