2012-05-08 4 views
1

私はCLIPSをCプログラムに組み込んでいるので、C関数呼び出しですべてを行う必要があり、CLIPSコマンドラインを使用することはできません。CLIPS:ファクトを取得してポインタを取得する

のは、私はこのようないくつかの事実を主張しているとしましょう:

AssertString("(pizza 1)"); 
AssertString("(cauliflower 7)"); 
AssertString("(cheesecake 0)"); 

はもちろん、私はこの時点で私の事実へのポインタを取得し(ましてや保持)しません。私が後でRetract(factPtr)を使って事実を後退させたいとき、私は明らかに私が引っ込めたい事実へのポインタを必要とします。だから、上の行の後に、どうすれば事実(cauliflower 7)をもう一度見つけて、そこへのポインタを得ることができますか?

ファクトリスト全体をGetFactList([...])で取得し、ループして文字列を比較する必要がありますか?もしそうなら、私はmultifieldでこれをどうすればDATA_OBJECTこの関数が返ってくるのですか?それとも良い方法がありますか?

私はアイデアやコード例にも感謝します。

答えて

1

ファクトクエリ関数を使用すると、ファクトリストをクエリしてアクションを実行できます。あなたがEvalFunctionによってこれを呼び出すことができます。最初の呼び出しで

DATA_OBJECT result; 

Eval("(do-for-all-facts ((?f pizza)) (eq ?f:implied (create$ 1)) (retract ?f))",&result); 
Eval("(do-for-all-facts ((?f cauliflower)) TRUE (retract ?f))",&result); 

を、値1を持つ唯一のピザの事実は後退します。 2回目の呼び出しでは、カリフラワーのすべての事実が取り消されます。

関連する問題