【问题标题】:Linux g++ Embedding Prolog Logic Engine Within C++Linux g++ 在 C++ 中嵌入 Prolog 逻辑引擎
【发布时间】: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(我的观点)

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

【问题讨论】:

标签: c++ prolog embed swi-prolog


【解决方案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++ 编写谓词也很容易。这是它的核心。
    猜你喜欢
    • 2023-03-21
    • 2013-09-09
    • 2011-01-19
    • 1970-01-01
    • 2012-06-11
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    相关资源
    最近更新 更多