2017-05-27 17 views
1

組み込みアプリケーションでCLIPSの新しい事実をアサートしようとしています。 私は2つの方法を試みました: - 最初のアドバンストプログラミングガイドの74ページの例のようにassertを使用します。 - 2番目の方法は、assert-stringを使用することです。 私はそれぞれの方法だけでなく、2つの方法を一緒に試しました。クリップ組み込みアプリケーションでファクトをアサートできません

私はRUN_TIMEモジュールを使用しています。私のコードは正しい構文(defrulesとdeftemplates)を出力しますが、新しい事実はアサートされません。最初の事実だけがそこにあります。どうしてか分かりません!ここで

は私のコードです:私のコードで間違っている

#include "clips.h" 

int main() 
{ 
    void *theEnv, *newFact, *templatePtr; 
    DATA_OBJECT theValue; 

    extern void *InitCImage_1(); 
    theEnv = InitCImage_1(); 

    EnvReset(theEnv); 

    // One way 
    templatePtr = EnvFindDeftemplate(theEnv, "Navigation"); 
    newFact = EnvCreateFact(theEnv, templatePtr); 
    if (newFact == NULL) return -1; 

    theValue.type = SYMBOL; 
    theValue.value = EnvAddSymbol(theEnv, "Auto"); 
    EnvPutFactSlot(theEnv, newFact, "FlightStatus", &theValue); 

    EnvAssert(theEnv, newFact); 

    // The other way 
    EnvAssertString(theEnv, "(Navigation (FlightStatus Auto))"); 

    EnvRun(theEnv,-1); 

    EnvListDeftemplates(theEnv, "stdout", NULL); 
    EnvListDefrules(theEnv, "stdout", NULL); 
    EnvListDeffacts(theEnv, "stdout", NULL); 
} 

何?

答えて

0

用途:

EnvFacts(theEnv,"stdout",NULL,-1,-1,-1); 

むしろより:

EnvListDeffacts(theEnv, "stdout", NULL); 

Deffactsは(リセット)コマンドが実行されたときにアサートされる事実のリストを定義する構造です。リセットが実行されたときに(初期事実)をアサートする、事前に定義された初期事実の定義があります。 EnvListDeffactsを呼び出すと、それが表示されます。代わりにEnvFactsを呼び出して、実際にアサートされたファクト(リセット後またはアサーションを直接使用してdeffactによって作成されたもの)を確認します。

+0

多くのありがとう@Gary。それは今働いている。 –

関連する問題