Linux g++ 在 C++ 中嵌入 Prolog 逻辑引擎

Posted

技术标签:

【中文标题】Linux g++ 在 C++ 中嵌入 Prolog 逻辑引擎【英文标题】:Linux g++ Embedding Prolog Logic Engine Within C++ 【发布时间】:2012-03-07 00:42:54 【问题描述】:

我在 C++ 程序中有一些逻辑,它不仅极其复杂,而且需要多种解决方案,Prolog 是理想的解决方案。它有点像防火墙配置脚本,检查输入的操作,但有时需要多个操作。

我想要的是这样的:

class PrologEngine

    LoadLogic(const char* filename) throw PrologException; // Load a file of prolog rules, predicates facts etc in textual format. Must be callable multiple times to load AND COMPILE (for speed) prolog rule files.

    std::vector<std::string> Evaluate(const char* predicate_in_string_form = "execute(input, Result)") throw PrologException; Returns a vector of matching predicates in text form.

;

它不需要回调到 C++ 中的能力。

AMI Prolog 似乎得到了它,但它在 Linux 上不可用。我正在尝试使用 SWI-Prolog,但只能找到 2 个示例和令人难以置信的拜占庭 API(我的观点)

谁能指出一个与我正在寻找的例子相近的例子?

【问题讨论】:

这篇博文有一个小例子说明你想用 swi-prolog 做什么:electricbacon.wordpress.com/2010/09/08/… 为什么不用 CLIPS 而不是 prolog? clipsrules.sourceforge.net/WhatIsCLIPS.html 【参考方案1】:

有A C++ interface to SWI-Prolog,是高级别的。

我是fighting with it,这里是桥接到 OpenGL 的示例:

PREDICATE(glEvalCoord1d, 1) 
 double u = A1;
 glEvalCoord1d( u );
 return TRUE;

这个干净的代码隐藏了许多“怪诞主义”,使用隐式类型转换和一些宏。该接口非常坚固且双向:要从 C++ 调用 Prolog,可以使用 PlCall(“运行”查询,类似于您在答案中公开的 Evaluate)或更结构化的 PlQuery,以获得多个结果...

如果您不需要链接到 openGl,或者可以等待听到我希望从 SWI-Prolog 邮件列表中获得的答案,您应该评估它。

【讨论】:

【参考方案2】:

如果您不介意重写 prolog 代码以在本地 c++ 仅标头库中使用,我会研究 castor 库: http://www.mpprogramming.com/cpp/

【讨论】:

蓖麻很有趣。你试过了吗?我担心它可能效率很低。 我想通了。一旦你弄清楚它是非常好的。用 C++ 编写谓词也很容易。这是它的核心。

以上是关于Linux g++ 在 C++ 中嵌入 Prolog 逻辑引擎的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式 Linux 中的 C 与 C++

g++:在嵌入式应用程序中使用单例

试图在 C++ 中嵌入 Lua,“未定义对 'dlopen' 的引用”

使用 Linux g++ 编译带有附加库的 c++ 程序

在c ++中嵌入python:分段错误[重复]

linux 用g++编译c++代码的问题