我正在使用嵌入在C程序中的CLIPS,因此我必须通过C函数调用来完成所有操作,并且不能使用CLIPS命令行。
让我说我已经断言了一些这样的事实:
AssertString("(pizza 1)");
AssertString("(cauliflower 7)");
AssertString("(cheesecake 0)");
显然,我现在没有得到(更不用说保留)任何关于我的事实的指示。当我想稍后使用Retract(factPtr)
收回一个事实时,我显然需要指向我想要收回的事实的指针。那么,在上面的行之后,我如何再次找到事实(cauliflower 7)
并获得指向它的指针?
我是否必须通过GetFactList([...])
获取整个事实列表,循环并比较字符串?如果是这样,我将如何在多字段DATA_OBJECT
中执行此功能返回此功能?或者有更好的方法吗?
我会对任何想法甚至代码示例表示感谢。
答案 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的披萨事实。在第二次调用中,所有花椰菜的事实都被收回。