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

Linux g++ Embedding Prolog Logic Engine Within C++

本文关键字:Prolog 引擎 g++ C++ Linux      更新时间:2023-10-16

我在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有一个C++接口,这是高级的。

我正在与之斗争,这里有一个桥接到OpenGL:的例子

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

这个干净的代码隐藏了许多"拜占庭主义",使用隐式类型转换和一些宏。接口非常坚固且双向:要从C++调用Prolog,有PlCall("运行"查询,类似于在答案中暴露的Evaluate)或更结构化的PlQuery,用于多个结果。。。

如果你不需要链接到openGl,或者可以等待我从SWI Prolog邮件列表中得到的答案,你应该对它进行评估。

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