0

CLIPS を C プログラムに接続しようとしています。一連のルールが外部の .clp ファイルから CLIPS にロードされます。私の新しい C プログラムは、一定の時間間隔で、いくつかの温度センサーからの現在の測定値を表す新しい事実 (例 (温度 35C)) を設定します。次に、エキスパート システムが開始され、いくつかの結論が下され、提供された測定値に基づいて必要なアクションが実行されます。結論は事実の形になります (答えは x です)。

CLIPS から目的のファクト フィールドを C variable の形式で読み取るにはどうすればよいですか? たとえば、関心のある事実が (Answer-is, x) で、最初のフィールドが Answer-is であることがわかっている場合、その事実を見つけて x を読み取るように C プログラムを作成するにはどうすればよいでしょうか?

私がやりたいことを理解するのに役立つコード例は次のとおりです。

int main(int argc,char *argv[]) {

    void *theEnv;
    theEnv = CreateEnvironment();
    InitializeEnvironment();


    Clear();
    Reset();

    // Load rules to CLIPS
    Load("example.clp");

    // Set facts and start CLIPS
    AssertString("(TemperatureSensor1 35)");
    AssertString("(TemperatureSensor2 32)");
    AssertString("(TemperatureSensor2 41)");

    Run(-1L);

    // Extract expert system answer to C
    // Read second field of generated fact from the example.clp
    // which is in the form like (Answer-is xxx)

    // ????????????????????????????
    // This part I do not know ....
    // ????????????????????????????

    return(-1);
  }
4

1 に答える 1

0

Eval API 関数を使用して、find-all-facts ファクト CLIPS クエリ関数を呼び出すことができます。Eval からの戻り値には、クエリを満たすファクトのリストが含まれます。その後、各ファクトを反復処理し (複数ある場合)、GetFactSlot 関数を使用してファクトのスロット値を取得できます。

于 2013-05-26T22:14:30.990 に答える