Datalog vs CLIPS vs Prolog

Eli*_*der 25 prolog logic-programming clips datalog

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

Fre*_*Foo 25

CLIPS和Prolog/Datalog之间的区别在于CLIPS是一个通过正向链接操作的"生产规则系统" :给定一组事实和规则,它将尝试尽可能地推导出新事实并将其存储在内存中.然后通过检查查询是否与事实存储中的某些内容匹配来回答查询.那么,在CLIPS中,如果你有(伪语法):

parent(X,Y) => child(Y,X)
parent(john,mary)
Run Code Online (Sandbox Code Playgroud)

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

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

Datalog是Prolog的非图灵完整子集,不允许例如否定.它的主要优点是每个Datalog程序都会终止(没有无限循环).这使得它对所谓的"演绎数据库"很有用,即除了事实之外还有规则的数据库.

  • 特别是,Datalog用于"查询关系数据库",相当于递归SQL.见[本演示文稿](http://webdam.inria.fr/College/090512Abiteboul.pdf).[Datomic](http://www.flyingmachinestudios.com/programming/datomic-for-five-year-olds/)数据库支持Datalog查询. (5认同)
  • 与 Prolog 不同,datalog 的语义中没有任何内容指定向后链接。前向和后向链接都可以并且已经被使用。 (2认同)

Ana*_*bic 19

数据记录是prolog的一个子集.数据记录所包含的子集有两点:

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

prolog是图灵完成的.数据记录不是.

将数据记录放在一边,让我们看看prolog与剪辑的比较.

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

另一种看待它的方法是:

专家系统的运作前提是大多数(如果不是全部)结果都是已知的.所有这些结果都汇编成数据,然后输入专家系统.给专家系统一个场景,专家系统从编译数据计算结果,即知识库.它始终是一个"偶数加偶数甚至总是偶数"的思维方式.

问题解决系统对问题的看法不完整.因此,我们开始使用建模数据和行为,这将构成知识库(这使得术语"角落案例"得以公正)并最终得出"如果我们添加两到六个,我们最终得到八个.是八个可被整除两个?那么它甚至是"

  • 对于CLIPS(具有OPS5祖先的生产系统),每当与事实数据库中的现有事实匹配时,想法是"推断"新事实(或消防动作),并且事实数据库可以在计算期间改变.这是"hacky/scruffy",理论上也很弱.对于Prolog来说,哲学是从数据库中的已知含义和事实"证明"一个定理,它不应该改变!这是基于合理的理论(基于Horn子句的一阶逻辑),可以通过引入语言的"非逻辑"元素随意削弱(类似于将GOTO添加到漂亮的代码中). (3认同)
  • 相对于Prolog,Datalog没有功能符号(因此没有要使用的面向树的结构,只有常量和变量),并且纯粹是声明性的(没有剪切,也没有通过重新排列子句的变化行为)。 (2认同)
  • ...最后,您可以在Prolog中实现前向链接器。 (2认同)