Datalog与CLIPS与Prolog的比较

34

像很多程序员一样,我在大学里学习了Prolog,但只是学了一点点。我知道Prolog和Datalog密切相关,但是Datalog更简单?此外,我相信我读过Datalog不依赖于逻辑子句的顺序,但是我不确定这有什么优势。CLIPS被认为是完全不同的,但对我来说太微妙了,很难理解。请问有人能提供一般性的语言差异亮点吗?


http://en.wikipedia.org/wiki/Datalog - starblue
2个回答

31

CLIPS和Prolog / Datalog的区别在于,CLIPS是一种“产生规则系统”,通过前向链接运行:给定一组事实和规则,它将尝试生成所有可能的新事实的推导并将其存储在内存中。然后通过检查是否与事实存储中的某些东西匹配来回答查询。因此,在CLIPS中,如果您有(伪语法):

parent(X,Y) => child(Y,X)
parent(john,mary)

它将立即推导出child(mary,john)并记住这个事实。这可能非常快,但会对可能的规则集造成限制并占用内存。

Prolog和Datalog通过向后链运行,意味着一个查询(谓词调用)通过尝试证明该查询来回答,即运行Prolog / Datalog程序。 Prolog是一种图灵完备的编程语言,因此可以在其中实现任何算法。

Datalog是Prolog的非图灵完备子集,不允许使用否定等。它的主要优点是每个Datalog程序都终止(没有无限循环)。 这使它对于所谓的“演绎数据库”,即具有规则而不仅仅是事实的数据库非常有用。


6
特别地,Datalog 用于“查询关系型数据库”,并且相当于递归 SQL。参见这个演示文稿Datomic 数据库支持 Datalog 查询。 - David Tonhofer
2
与Prolog不同的是,Datalog语义中没有指定后向链接。前向链接和后向链接都可以被使用。 - seanmcl
1
@seanmcl 在Prolog中也可以使用约束处理规则实现正向链接。 - Anderson Green

23

datalog是prolog的一个子集。这个子集有两个目标:

  1. 采用支持规则和查询的API
  2. 确保所有查询都终止

Prolog是图灵完备的,而Datalog不是。

搞定了Datalog,我们来看看Prolog与CLIPS的比较。

Prolog的专长是“问题解决”,而CLIPS是“专家系统”。如果我理解正确,“问题解决”涉及使用代码和数据的专业知识。“专家系统”则主要使用数据结构来表达专业知识。参见http://en.wikipedia.org/wiki/Expert_system#Comparison_to_problem-solving_systems

另一种看待它的方式是:

专家系统的前提是大多数(如果不是全部)结果都已知。所有这些结果都编译成数据,然后输入专家系统。给专家系统一个场景,专家系统从编译的数据(即知识库)计算结果。这总是一种“偶数加偶数总是偶数”的思维方式。

问题解决系统对问题的视角不全面。因此,人们从建模数据和行为开始,组成知识库(这使术语“边缘案例”得到了体现),最终得出“如果我们将六加二,我们得到八。八可被二整除吗?那么它是偶数”。


6
相对于Prolog,Datalog没有函数符号(因此没有树形结构可用,只有常量和变量),并且是纯粹的声明式(没有裁剪操作,并且不会因重新排列子句而出现不同的行为)。 - David Tonhofer
5
对于具有OPS5血统的"CLIPS"(一种产生式系统),其思想是在与事实数据库中现有事实匹配时“推断”出新的事实(或触发动作),并且在计算过程中,事实数据库可以发生变化。这种方法从理论上来讲并不太成熟/稳健。对于Prolog,其哲学是基于已知蕴含和事实库中的事实来“证明”定理,而这些内容不应该发生改变!这是基于可靠的理论(基于Horn子句的一阶逻辑),但可以通过引入"非逻辑"语言元素(类似于将GOTO添加到好的代码)而随意削弱它。 - David Tonhofer
2
最后,您可以在Prolog中实现前向链接器。 - David Tonhofer
1
@TomR 我无法在这里给你一个深入的答案,因为我还没有深入挖掘。我曾经看过CHR,虽然它们看起来像是一种很好的通用计算模型(特别是在课堂上提出),但它们对于实际工作来说感觉太基础了(也许我错了)。在2000年之前,我知道有关添加产生式系统功能的努力:向Prolog添加正向链接和真值维护(1989) ... - David Tonhofer
1
有维护的实现和论文。LPS中的KELPS部分是一个简化的核心。请查看以下链接:Programming in logic without logic programmingReactive Computing as Model Generation - David Tonhofer
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接