在杰西(Jess)中,假设我的Factbase由几个名称/值对组成,例如
(node1 6.5) (node2 100) (node3 0.5)
如何在不手动收回的情况下实现将“ node1”值从6.5“更新”到100?
此外,在触发特定规则后,是否有办法“重新声明”所有事实?
答案 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)
函数,看看它们是否可以满足您的需求。