我正在开发一个相当复杂的规则引擎。所以我决定接受任何GNU规则引擎的帮助,并将其与我的应用程序集成。我认为CLIPS是一个很好的规则引擎。
现在,我的应用程序是用C ++编写的,我想要一个示例方式(一种Hello世界的程序),我可以从中学习如何将.clp规则引擎集成到我的C ++应用程序中。
问题
更新1:
您正在开发什么样的应用程序?
为了使它成为一条线,我正在开发一个基于过滤器匹配的计数器。用户可以递增(NetworkID = XYZ,递增计数= 7),(NetworkID = MNO,递增计数= 934)...等等。现在您获得NetworkID = X *的查询,然后我需要提供来自XAA的所有计数。 ..XZZ。它在多个进程中更新,跨越不同节点(分布式环境)的多个线程。
为什么你内部有专家系统规则,以及什么样的规则? 现在,我的平台/应用程序使用C ++(用户执行递增/递减/查询)。现在我想使用规则引擎来帮助我。用C / C ++代码编写逻辑似乎会消耗更多所需的资源。
PS:与增量/减量/查询相关的关键代码都在优化的c代码中。一些包装器使用C ++代码。所以我正在检查规则引擎是否可以从我的平台/应用程序(在C / C ++代码中)调用它。
答案 0 :(得分:2)
将CLIPS与C ++集成的最简单方法是使用编译器选项(如果可用)将C代码编译为C ++代码。从高级编程指南的第1.2节“C ++兼容性”(http://clipsrules.sourceforge.net/documentation/v624/apg.htm):
现在可以使用ANSI C或者编译CLIPS源代码 C ++编译器。最低限度,非ANSI C编译器必须支持完整的ANSI 样式函数原型和void数据类型以便编译 剪辑。如果你想从C ++程序进行CLIPS API调用,那就是 通常通过编译CLIPS源更容易进行集成 文件作为C ++文件。这消除了制作外部“C”的需要 在C ++程序中声明CLIPS API。一些编程 环境允许您指定文件是否应该是 根据文件扩展名编译为C或C ++代码。其他 环境允许您显式指定要使用的编译器 无论扩展名如何(例如在gcc中选项“-x c ++”都会 将.c文件编译为C ++文件)。在某些环境中,相同 编译器用于编译C和C ++程序以及编译器 使用文件扩展名来确定文件是否应该是 编译为C或C ++程序。在这种情况下,改变.c 将CLIPS源文件扩展为.cpp通常允许源 编译为C ++程序。
您可以尝试使用clipmm(http://sourceforge.net/projects/clipsmm/)之类的东西,它是CLIPS库的C ++接口。