在杰西,假设我的资料库由几个名称/值对组成,例如
(node1 6.5) (node2 100) (node3 0.5)
我如何实现将“ node1”值从6.5“更新”到100而不手动撤消它?
而且,在触发特定规则后,还有办法“重新声明”所有事实吗?
您使用杰西的(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)
函数,并查看它们是否能满足您的要求。