4

我正在开发一个相当复杂的规则引擎。所以我决定借助任何 GNU 规则引擎并将其与我的应用程序集成。我发现CLIPS是一个很好的规则引擎。

现在,我的应用程序是 C++ 语言,我想要一个示例方式(一种 Hello world 程序),从中我可以学习如何将 .clp 规则引擎集成到我的 C++ 应用程序中。

问题

  1. 我的应用程序是在 Linux/AIX/HP 和 Mingw (for windows) 上开发的。我们能否在 CLIPS 中开发规则引擎并将其集成到所有这些平台上的 C++ 应用程序中?您能否分享有关如何集成的链接。
  2. 进入规则引擎的根本原因是,我经历过在我的 C/C++ 应用程序中“构建”的规则需要大量内存/CPU。我的印象是,通过使用规则引擎,我可以以更优化(更好的资源利用率)的方式实现相同的目标。CLIPS 可以帮助我实现这一目标吗?

更新1:

  • 您正在开发什么样的应用程序?
    总而言之,我正在开发一个基于过滤器匹配的计数器。用户可以增加 (NetworkID=XYZ, Increment count = 7), (NetworkID = MNO, Increment count=934)... 等等。现在您得到 NetworkID=X* 的查询,然后我需要提供来自 XAA 的所有计数。 ..XZZ。它在跨不同节点(分布式环境)的多进程、多线程中更新。

  • 为什么里面有专家系统规则,是什么规则?
    现在,我的平台/应用程序在 C++ 中(用户在其中进行递增/递减/查询)。现在我想使用规则引擎来帮助我完成这些。用 C/C++ 代码编写逻辑似乎会消耗更多所需的资源。

PS:增量/减量/查询相关的关键代码都在优化的c代码中。一些包装器在 C++ 代码中。所以我正在检查规则引擎来为我做这件事,它可以从我的平台/应用程序(在 C/C++ 代码中)调用。

4

1 回答 1

2

将 CLIPS 与 C++ 集成的最简单方法是使用编译器选项(如果可用)将 C 代码编译为 C++ 代码。来自高级编程指南 ( http://clipsrules.sourceforge.net/documentation/v624/apg.htm )的第 1.2 节,C++ 兼容性:

现在可以使用 ANSI C 或 C++ 编译器编译 CLIPS 源代码。最低限度,非 ANSI C 编译器必须支持完整的 ANSI 样式函数原型和 void 数据类型才能编译 CLIPS。如果您想从 C++ 程序进行 CLIPS API 调用,通常通过将 CLIPS 源文件编译为 C++ 文件来进行集成更容易。这消除了在 C++ 程序中为 CLIPS API 进行外部“C”声明的需要。某些编程环境允许您根据文件扩展名指定文件应编译为 C 代码还是 C++ 代码。其他环境允许您明确指定要使用的编译器,而不管扩展名如何(例如,在 gcc 中,选项“-x c++”会将 .c 文件编译为 C++ 文件)。在某些环境中,相同的编译器用于编译 C 和 C++ 程序,并且编译器使用文件扩展名来确定文件应编译为 C 程序还是 C++ 程序。在这种情况下,将 CLIPS 源文件的 .c 扩展名更改为 .cpp 通常可以将源代码编译为 C++ 程序。

或者,您可以尝试使用 clipsmm ( http://sourceforge.net/projects/clipsmm/ ) 之类的东西,它是 CLIPS 库的 C++ 接口。

于 2013-08-03T02:14:09.213 回答