和许多程序员一样,我在大学学习Prolog,但只是很少。我知道Prolog和Datalog密切相关,但Datalog更简单吗?另外,我相信我读到Datalog不依赖于逻辑子句的排序,但我不确定为什么这是优点。据说CLIPS完全不同,但对我来说理解太微妙了。有人可以提供其他语言的语言的一般亮点吗?
答案 0 :(得分:23)
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程序终止(没有无限循环)。这使得它对所谓的“演绎数据库”很有用,即除了事实之外还有规则的数据库。
答案 1 :(得分:16)
数据记录是prolog的子集。数据记录所包含的子集有两个方面:
prolog是图灵完成的。数据记录不是。
将数据记录排除在外,让我们看看prolog与剪辑的比较。
prolog的专长是“解决问题”,而剪辑则是“专家系统”。如果我理解正确,“解决问题”涉及使用代码和数据的专业知识。 “专家系统”主要使用数据结构来表达专业知识。见http://en.wikipedia.org/wiki/Expert_system#Comparison_to_problem-solving_systems另一种看待它的方式是:
专家系统的运作前提是大多数(如果不是全部)结果都是已知的。所有这些结果都汇编成数据,然后输入专家系统。给专家系统一个场景,专家系统从编译数据计算结果,即知识库。它始终是一个“偶数加上偶数甚至是偶数”的想法。
问题解决系统对问题的看法不完整。因此,我们开始使用建模数据和行为,这将构成知识库(这使得术语“角落案例”得以公正)并最终得出“如果我们添加两到六个,我们最终得到八个。是八个可被整除两个?那么它甚至是“