断言新事实时如何重置事实索引?

时间:2014-04-08 10:23:10

标签: clips

我已将CLIPS嵌入到C语言中。 我有这样的情况: 在.clp文件中,我有事实列表

(deftemplate sensor
 (slot name) 
 (slot status)) 

(deffacts FRONTSENSOR
(sensor (name 1) (status 1))
(sensor (name 2) (status 1))
(sensor (name 3) (status 0))
(sensor (name 4) (status 0))
(sensor (name 5) (status 1))
(sensor (name 6) (status 0))
(sensor (name 7) (status 0))
(sensor (name 8) (status 0))) 

现在我想取消这些事实并在列表中声明新的事实。 我使用Retract(factPtr);取消事实并使用AssertString("(sensor (name 1) (status 0))");断言事实。 我打印事实列表,结果是

f-0     (initial-fact)
f-11    (sensor (name 1) (status 0))
f-12    (sensor (name 2) (status 0))
f-13    (sensor (name 3) (status 1))
f-14    (sensor (name 4) (status 0))
f-15    (sensor (name 5) (status 0))
f-16    (sensor (name 6) (status 0))
f-17    (sensor (name 7) (status 1))
f-18    (sensor (name 8) (status 1))
For a total of 9 facts.

事实索引是从11而不是1开始,我想知道是否有新的断言事实可以从f-1开始的函数或解决方案。 Ps:Clear()函数可以重置事实索引,但规则也将被清除。这似乎没有帮助。

感谢您的回答或任何想法。

1 个答案:

答案 0 :(得分:0)

Reset()函数将删除所有事实并重置事实索引而不删除任何规则。