和很多程序员一样,我在大学里学过 Prolog,但很少。我知道Prolog和Datalog密切相关,但Datalog更简单?另外,我相信我读到 Datalog 不依赖于逻辑子句的顺序,但我不确定为什么这是优势。CLIPS 应该是完全不同的,但它太微妙了,我无法理解。有人可以提供这些语言相对于其他语言的一般亮点吗?
2 回答
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 是 prolog 的一个子集。datalog 携带的子集有两件事:
- 采用支持规则和查询的 API
- 确保所有查询都终止
prolog 是图灵完备的。数据记录不是。
让数据记录不碍事,让我们看看 prolog 与剪辑的比较。
prolog 的专长是“解决问题”,而 clips 是“专家系统”。如果我理解正确,“解决问题”涉及使用代码和数据的专业知识。“专家系统”主要使用数据结构来表达专业知识。见http://en.wikipedia.org/wiki/Expert_system#Comparison_to_problem-solving_systems
另一种看待它的方式是:
专家系统在大多数(如果不是全部)结果已知的前提下运行。所有这些结果都被编译成数据,然后输入专家系统。给专家系统一个场景,专家系统根据编译的数据计算结果,也就是知识库。它总是一种“偶数加偶数总是偶数”的思维方式。
问题解决系统对问题的看法不完整。因此,从建模数据和行为开始,这将构成知识库(这对术语“极端情况”是公平的)并以“如果我们将 2 加到 6,我们最终得到 8。8 可以被两个?那么它是偶数“