2010-10-13 31 views
17

许多程序员在大学学习Prolog,但只有很少。我知道Prolog和Datalog密切相关,但Datalog更简单?另外,我相信我读到Datalog不依赖于逻辑子句的排序,但我不确定为什么这是优点。据推测CLIPS是完全不同的,但对我来说这太微妙了。有人可以提供其他语言的语言的一般亮点吗?Datalog vs CLIPS vs Prolog

+0

http://en.wikipedia。org/wiki/Datalog – starblue 2010-10-13 14:27:22

回答

15

datalog是prolog的子集。该数据记录携带子心中都有两件事情:

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

序言的API是图灵完备。数据记录不是。让我们看看prolog如何与剪辑进行比较。

prolog的专长是“解决问题”,而剪辑是一个“专家系统”。如果我理解正确,“解决问题”涉及使用代码和数据的专业知识。 “专家系统”大多使用数据结构来表达专业知识。看到http://en.wikipedia.org/wiki/Expert_system#Comparison_to_problem-solving_systems

另一种方式来看待它是:

专家系统的前提下,大部分(如果不是全部)的结果是已知的操作。所有这些结果都汇编成数据,然后送入专家系统。给专家系统一个场景,专家系统从编译的数据计算结果,也就是知识库。它总是一个“偶数加偶数总是偶数”的想法。

问题解决系统对问题的看法不完整。所以人们开始建模数据和行为,这将构成知识库(这给了“角落案例”一词的正义),并最终以“如果我们加两到六,最后八加八。两个?那么它甚至是“

+1

相对于Prolog,Datalog没有函数符号(因此没有使用面向树的结构,只是常量和变量),并且是纯粹声明式的(没有剪切,也没有通过重新排列子句来改变行为)。 – 2015-01-07 18:49:20

+2

对于CLIPS(具有OPS5祖先的生产系统),想法是在事实数据库中与现有事实匹配时“推断”新事实(或触发动作),并且事实数据库可在计算过程中更改。这是“hacky/scruffy”和弱的理论。对于Prolog来说,这个哲学是“证明”一个来自数据库中已知含义和事实的定理,它不应该改变!这是基于合理的理论(基于Horn子句的一阶逻辑),可以通过拉入语言的“非逻辑”元素(类似于将GOTO添加到漂亮的代码中)来随意削弱。 – 2015-01-07 18:51:40

+0

......最后,你可以在Prolog中实现前向链接。 – 2015-01-07 18:52:21

21

CLIPS和前导/数据记录之间的区别在于,CLIPS是一种“生产规则系统”,通过运行正向推理:给定一组事实和规则,它会尝试让新的事实每一个可能的推导和将这些存储在内存中。然后通过检查它是否匹配事实存储库中的某个东西来回答查询。所以,在剪辑,如果你有(伪语法):

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

它会立即获得child(mary,john)并记住这个事实。这可能非常快,但会限制可能的规则集并占用内存。

序言和数据记录操作反向链接,这意味着通过试图证明查询,即运行Prolog/Datalog程序来回答查询(谓词调用)。 Prolog是一个图灵完整的编程语言,所以任何算法都可以在其中实现。

Datalog是Prolog的非Turing完整子集,不允许例如否定。它的主要优点是每个Datalog程序都终止(没有无限循环)。这对于所谓的“演绎数据库”是有用的,即具有除事实以外的规则的数据库。

+4

特别是,Datalog是用于“查询关系数据库”的,相当于递归SQL。参见[本介绍](http://webdam.inria.fr/College/090512Abiteboul.pdf)。 [Datomic]数据库支持Datalog查询。 – 2015-01-07 18:36:34

+1

与Prolog不同,datalog的语义中没有任何内容指定反向链接。向前和向后链可以被使用。 – seanmcl 2015-10-09 22:28:05

+0

@seanmcl使用[约束处理规则](https://en.wikipedia.org/wiki/Constraint_Handling_Rules),Prolog中也可以使用正向链接。 – 2017-02-12 06:14:08

相关问题