CLIPS:检索事实并获取指向它的指针

时间:2012-05-08 18:05:31

标签: clips

我正在使用嵌入在C程序中的CLIPS,因此我必须通过C函数调用来完成所有操作,并且不能使用CLIPS命令行。

让我说我已经断言了一些这样的事实:

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

显然,我现在没有得到(更不用说保留)任何关于我的事实的指示。当我想稍后使用Retract(factPtr)收回一个事实时,我显然需要指向我想要收回的事实的指针。那么,在上面的行之后,我如何再次找到事实(cauliflower 7)并获得指向它的指针?

我是否必须通过GetFactList([...])获取整个事实列表,循环并比较字符串?如果是这样,我将如何在多字段DATA_OBJECT中执行此功能返回此功能?或者有更好的方法吗?

我会对任何想法甚至代码示例表示感谢。

1 个答案:

答案 0 :(得分: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的披萨事实。在第二次调用中,所有花椰菜的事实都被收回。