如何区别ban 逻辑 prolog逻辑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何区别ban 逻辑 prolog逻辑相关的知识,希望对你有一定的参考价值。

参考技术A 一、Prolog(Programming in Logic的缩写)是一种逻辑编程语言。它建立在逻辑学的理论基础之上, 最初被运用于自然语言等研究领域。现已广泛的应用在人工智能的研究中,可以用来建造专家系统、自然语言理解、智能知识库等。同时对一些通常的应用.本回答被提问者采纳

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

【中文标题】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++ 编写谓词也很容易。这是它的核心。

以上是关于如何区别ban 逻辑 prolog逻辑的主要内容,如果未能解决你的问题,请参考以下文章

Prolog 中如何表示谓词逻辑?

Prolog中的“逻辑纯度”是啥意思?

图 DB 与 Prolog(或 miniKanren)

prolog 一阶逻辑

Prolog 逻辑拼图不起作用?

Prolog约束逻辑编程 - 如何在给定整数列表的情况下在域变量列表上设置域?