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



我已经将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()函数可以重置事实索引,但规则也会被清理。这似乎没有帮助。

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

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

最新更新