0

我尝试将 CLIPS 连接到我的 C 程序。规则集将从外部 .clp 文件加载到 CLIPS。我的新 C 程序将以固定的时间间隔设置新的事实(例如(温度 35C)),这些事实将代表来自某些温度传感器的当前测量值。然后将启动专家系统并根据提供的测量结果做出一些结论并采取必要的行动。结论将以事实的形式出现(Answer-is x)。

如何以 C 变量的形式从 CLIPS 读取所需的事实字段?例如,如果感兴趣的事实是 (Answer-is, x),并且如果我知道第一个字段是 Answer-is,我如何让我的 C 程序找到该事实并读取 x?

可以帮助您理解我想做的示例代码如下:

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 fact CLIPS 查询函数。Eval 的返回值将包含满足您查询的事实列表。然后,您可以遍历每个事实(如果有多个)并使用 GetFactSlot 函数来检索事实的槽值。

于 2013-05-26T22:14:30.990 回答