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



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

假设我断言了一些这样的事实:

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

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

我是否必须通过GetFactList([...])获取整个事实列表,遍历它并比较字符串?如果是这样,在此函数返回DATA_OBJECT,我将如何在多字段中执行此操作?还是有更好的方法?

我将不胜感激任何想法甚至代码示例。

您可以使用事实查询函数来查询事实列表并执行操作。您可以通过 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 的披萨事实。在第二次通话中,所有花椰菜事实都被撤回。

最新更新