为什么不在Prolog中编写规则引擎?[关闭]


16

从我对Prolog的了解来看,似乎很适合为应用程序设计规则引擎。但是,我不相信我曾经见过用Prolog编写的规则引擎。Prolog是否存在一些固有的限制(例如,糟糕的垃圾回收算法),以防止其用于构建规则引擎?


7
梯子。(几乎)没人知道序言,甚至更多的开发人员也不想知道任何无法完成日常工作的事情,因此他们可以回家。不幸的是,Prolog非常酷。
Jimmy Hoffa 2013年

3
虽然Prolog具有出色的edsl。我通常会采用在Haskell或Scheme之类的语言中嵌入序言
Daniel Gratzer

3
@JimmyHoffa正在减少。一些人学习序言,然后在他们的余生中积极地忘记它。
ZJR

5
我看到3票赞成票-任何人都想告诉我这个问题怎么了,所以我可以解决还是撤回它?
Onorio Catenacci

2
我投票以“主要基于意见”为结尾。如果您可以说服我,我将撤回我的近距离投票。我个人发现Prolog不透明;我希望规则引擎具有用于定义规则的更直观的语法。它一种编程语言,而不是规则引擎本身的语法原型。
罗伯特·哈维

Answers:


14

刚起步的规则引擎几乎都是用Prolog编写的-这是逻辑语言。对于一小部分规则,它们效果很好。但是,事实证明它们的伸缩性不是很好。我没有明确的参考,但我的理解是Prolog处理规则链的方式效率低下-为创建大型堆栈而创建的递归模型使之爬行。

RETE算法及其后继者的发展为处理大量规则提供了一种更有效的方法,因此接手了。

当大多数早期工作完成时,现代的序言也许会比80年代的效率更高。



1
与此相关的另一篇文章:haleyai.com/wordpress/2013/06/22/…–
马修·弗林

疯狂的问题。人们不是在序言中实施RETE,从而充分利用了这两个词吗?(很多情况下RETE并没有像序言那样)。
user48956

14

用舌头回答:因为如果规则引擎的创建者知道Prolog(或Mercury或PLANNER或…),他们将不会编写规则引擎,因此他们将使用Prolog。


5

通常,规则引擎的要点是它是另一个应用程序的一部分。很少看到用Prolog编写的应用程序,并且没有通用的接口将Prolog连接到用其他语言编写的应用程序。

CLIPS是一种用于规则引擎的基于规则的工具,可以将其添加到其他应用程序中。CLIPS基于OPS5,并使用Rete算法修剪规则。


并非完全正确,从外部程序到Prolog代码都有一些接口。SWI-Prolog有一个C ++接口和连接到R的方式
鲁道夫奥拉

3
实际上,我见过的所有Prolog引擎都可以使用C或C ++,因为“没人”将Proolog用于完整的应用程序,但是“每个人”都可以通过调用C函数来调用专用库。即GNU Prolog的gprolog.univ-paris1.fr/manual/html_node/gprolog065.html
约翰内斯·

感谢指针@johannes。我根本不了解GNU Prolog。更在于它可以从C调用
Onorio Catenacci的

另请参见:swi-prolog.org
user48956
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.