1

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

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

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

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

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

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

4

1 回答 1

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 的比萨事实被撤回。在第二次调用中,所有花椰菜事实都被撤回。

于 2012-05-31T19:36:07.870 回答