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 逻辑引擎的主要内容,如果未能解决你的问题,请参考以下文章