像很多程序员一样,我在大学里学习了Prolog,但只是学了一点点。我知道Prolog和Datalog密切相关,但是Datalog更简单?此外,我相信我读过Datalog不依赖于逻辑子句的顺序,但是我不确定这有什么优势。CLIPS被认为是完全不同的,但对我来说太微妙了,很难理解。请问有人能提供一般性的语言差异亮点吗?
像很多程序员一样,我在大学里学习了Prolog,但只是学了一点点。我知道Prolog和Datalog密切相关,但是Datalog更简单?此外,我相信我读过Datalog不依赖于逻辑子句的顺序,但是我不确定这有什么优势。CLIPS被认为是完全不同的,但对我来说太微妙了,很难理解。请问有人能提供一般性的语言差异亮点吗?
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的一个子集。这个子集有两个目标:
Prolog是图灵完备的,而Datalog不是。
搞定了Datalog,我们来看看Prolog与CLIPS的比较。
Prolog的专长是“问题解决”,而CLIPS是“专家系统”。如果我理解正确,“问题解决”涉及使用代码和数据的专业知识。“专家系统”则主要使用数据结构来表达专业知识。参见http://en.wikipedia.org/wiki/Expert_system#Comparison_to_problem-solving_systems
另一种看待它的方式是:
专家系统的前提是大多数(如果不是全部)结果都已知。所有这些结果都编译成数据,然后输入专家系统。给专家系统一个场景,专家系统从编译的数据(即知识库)计算结果。这总是一种“偶数加偶数总是偶数”的思维方式。
问题解决系统对问题的视角不全面。因此,人们从建模数据和行为开始,组成知识库(这使术语“边缘案例”得到了体现),最终得出“如果我们将六加二,我们得到八。八可被二整除吗?那么它是偶数”。