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

问题描述 投票:1回答:1

在杰西,假设我的资料库由几个名称/值对组成,例如

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

我如何实现将“ node1”值从6.5“更新”到100而不手动撤消它?

而且,在触发特定规则后,还有办法“重新声明”所有事实吗?

java rules jess
1个回答
1
投票

您使用杰西的(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)函数,并查看它们是否能满足您的要求。

© www.soinside.com 2019 - 2024. All rights reserved.