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.
ファクト インデックスが 1 ではなく 11 から始まる場合、新しいアサートされたファクトが f-1 から開始できる関数または解決策があるかどうか疑問に思います。Ps:<code>Clear() 関数はファクト インデックスをリセットできますが、ルールも消去されます。役に立たないようです。
答えやアイデアをありがとう。