【问题标题】:Datalog vs CLIPS vs PrologDatalog vs CLIPS vs Prolog
【发布时间】:2011-04-24 21:22:23
【问题描述】:

与我在大学学习 Prolog 的程序员一样多,但只学过很少。我知道Prolog和Datalog密切相关,但Datalog更简单?另外,我相信我读到 Datalog 不依赖于逻辑子句的顺序,但我不确定为什么这是优势。 CLIPS 应该是完全不同的,但它太微妙了,我无法理解。有人可以提供这些语言相对于其他语言的一般亮点吗?

【问题讨论】:

标签: prolog logic-programming clips datalog


【解决方案1】:

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 程序都会终止(没有无限循环)。这使得它对所谓的“演绎数据库”很有用,即除了事实之外还有规则的数据库。

【讨论】:

  • 特别是Datalog是用来“查询关系型数据库”的,相当于递归SQL。见this presentationDatomic 数据库支持 Datalog 查询。
  • 与 Prolog 不同,datalog 的语义中没有任何内容指定反向链接。前向和后向链接都可以使用。
  • @seanmcl 前向链接也可以在 Prolog 中使用constraint handling rules
【解决方案2】:

datalog 是 prolog 的一个子集。 datalog 携带的子集有两件事:

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

prolog 是图灵完备的。数据记录不是。

让数据记录不碍事,让我们看看 prolog 与剪辑的比较。

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

另一种看待它的方式是:

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

问题解决系统对问题的看法不完整。因此,从建模数据和行为开始,这将构成知识库(这对术语“极端情况”是公平的)并以“如果我们将 2 加到 6,我们最终得到 8。8 可以被两个?那么它是偶数”

【讨论】:

  • 相对于 Prolog,Datalog 没有函数符号(因此没有可使用的面向树的结构,只有常量和变量)并且是纯声明性的(没有剪切,也没有通过重新排列子句来改变行为) .
  • 对于 CLIPS(具有 OPS5 祖先的生产系统),其想法是每当与事实数据库中的现有事实匹配时“推断”新事实(或触发动作),并且事实数据库可以在计算过程中改变。这是“hacky/scruffy”和弱理​​论。对于 Prolog,哲学是从数据库中的已知含义和事实“证明”一个不应该改变的定理!这是基于合理的理论(基于 Horn 子句的一阶逻辑),可以通过引入语言的“非逻辑”元素来随意削弱它(类似于将 GOTO 添加到漂亮的代码中)。
  • ...最后,您可以在 Prolog 中实现前向链接器。
  • @TomR 我不能在这里给你一个深刻的答案,因为我没有深入挖掘。我曾经看过 CHR,虽然它们看起来像是一个很好的通用计算模型(特别是在课堂上提出的一些东西),但它们对于实际工作来说太基础了(也许我弄错了)。我知道在 2000 年之前添加生产系统功能的努力:Adding forward chaining and truth maintenance to Prolog (1989) ...
  • ...Efficient Support for Reactive Rules in Prolog (1997)。今天有 Kowalski 和 Sadri 的逻辑生产系统,它非常有趣,因为它对反应规则有一个逻辑解释:底层 Prolog 系统计算一个模型,使反应规则 true,从那里不可逆转的世界- 可以发布改变行动(这东西需要一本好教科书,我去年想进入但暂时放弃了)....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-18
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
相关资源
最近更新 更多