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

时间:2012-02-15 16:39:59

标签: c++ prolog embed swi-prolog

我在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(我的观点)

有人能指出一个接近我正在寻找的例子吗?

2 个答案:

答案 0 :(得分:4)

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邮件列表中获得的答案,您应该对其进行评估。

答案 1 :(得分:3)

如果您不介意重写prolog代码以便在本机c ++头文件库中使用,我会查看脚本库: http://www.mpprogramming.com/cpp/