许多程序员在大学学习Prolog,但只有很少。我知道Prolog和Datalog密切相关,但Datalog更简单?另外,我相信我读到Datalog不依赖于逻辑子句的排序,但我不确定为什么这是优点。据推测CLIPS是完全不同的,但对我来说这太微妙了。有人可以提供其他语言的语言的一般亮点吗?Datalog vs CLIPS vs Prolog
回答
datalog是prolog的子集。该数据记录携带子心中都有两件事情:
- 采用将支持规则和查询
- 确保所有查询终止
序言的API是图灵完备。数据记录不是。让我们看看prolog如何与剪辑进行比较。
prolog的专长是“解决问题”,而剪辑是一个“专家系统”。如果我理解正确,“解决问题”涉及使用代码和数据的专业知识。 “专家系统”大多使用数据结构来表达专业知识。看到http://en.wikipedia.org/wiki/Expert_system#Comparison_to_problem-solving_systems
另一种方式来看待它是:
专家系统的前提下,大部分(如果不是全部)的结果是已知的操作。所有这些结果都汇编成数据,然后送入专家系统。给专家系统一个场景,专家系统从编译的数据计算结果,也就是知识库。它总是一个“偶数加偶数总是偶数”的想法。
问题解决系统对问题的看法不完整。所以人们开始建模数据和行为,这将构成知识库(这给了“角落案例”一词的正义),并最终以“如果我们加两到六,最后八加八。两个?那么它甚至是“
相对于Prolog,Datalog没有函数符号(因此没有使用面向树的结构,只是常量和变量),并且是纯粹声明式的(没有剪切,也没有通过重新排列子句来改变行为)。 – 2015-01-07 18:49:20
对于CLIPS(具有OPS5祖先的生产系统),想法是在事实数据库中与现有事实匹配时“推断”新事实(或触发动作),并且事实数据库可在计算过程中更改。这是“hacky/scruffy”和弱的理论。对于Prolog来说,这个哲学是“证明”一个来自数据库中已知含义和事实的定理,它不应该改变!这是基于合理的理论(基于Horn子句的一阶逻辑),可以通过拉入语言的“非逻辑”元素(类似于将GOTO添加到漂亮的代码中)来随意削弱。 – 2015-01-07 18:51:40
......最后,你可以在Prolog中实现前向链接。 – 2015-01-07 18:52:21
CLIPS和前导/数据记录之间的区别在于,CLIPS是一种“生产规则系统”,通过运行正向推理:给定一组事实和规则,它会尝试让新的事实每一个可能的推导和将这些存储在内存中。然后通过检查它是否匹配事实存储库中的某个东西来回答查询。所以,在剪辑,如果你有(伪语法):
parent(X,Y) => child(Y,X)
parent(john,mary)
它会立即获得child(mary,john)
并记住这个事实。这可能非常快,但会限制可能的规则集并占用内存。
序言和数据记录操作反向链接,这意味着通过试图证明查询,即运行Prolog/Datalog程序来回答查询(谓词调用)。 Prolog是一个图灵完整的编程语言,所以任何算法都可以在其中实现。
Datalog是Prolog的非Turing完整子集,不允许例如否定。它的主要优点是每个Datalog程序都终止(没有无限循环)。这对于所谓的“演绎数据库”是有用的,即具有除事实以外的规则的数据库。
特别是,Datalog是用于“查询关系数据库”的,相当于递归SQL。参见[本介绍](http://webdam.inria.fr/College/090512Abiteboul.pdf)。 [Datomic]数据库支持Datalog查询。 – 2015-01-07 18:36:34
与Prolog不同,datalog的语义中没有任何内容指定反向链接。向前和向后链可以被使用。 – seanmcl 2015-10-09 22:28:05
@seanmcl使用[约束处理规则](https://en.wikipedia.org/wiki/Constraint_Handling_Rules),Prolog中也可以使用正向链接。 – 2017-02-12 06:14:08
- 1. SWI-Prolog动态/ 1 vs动态/ 2
- 2. Prolog平放蓄电池vs孔
- 3. vs vs 2008 vs vs 2010
- 4. Datalog分层
- 5. Exec的VS ExecWait VS ExecShell VS nsExec :: Exec的VS nsExec :: ExecToLog VS nsExec :: ExecToStack VS ExecDos VS ExeCmd
- 6. FTP vs SFTP vs HDFS vs NTFS vs EXT2,EXT3
- 7. VS VS VS VS 11中的MVC测试
- 8. CGL vs AGL vs OpenGL vs NSOpenGL vs CoreAnimation(CALayer)
- 9. MobileNet VS SqueezeNet VS ResNet50 VS启V3 VS VGG16
- 10. NTOSKRNL.EXE VS NTKRNLMP.EXE VS NTKRNLPA.EXE VS NTKRPAMP.EXE
- 11. VS 2008 vs VS 2008 Express
- 12. RailwayJS vs Geddy vs Express vs Socket.IO
- 13. .NET vs ASP.NET vs CLR vs ASP
- 14. DynamicProperty vs MutableProperty vs AnyProperty vs ConstantsProperty
- 15. codendi vs redmine vs Retrospectiva vs trac
- 16. body.scrollTop VS documentElement.scrollTop VS window.pagYOffset VS window.scrollY
- 17. Asp.net vs Html5 vs xml vs xhtml
- 18. Sleep VS alarmManager.set VS alarmManager.setRepeat VS Handler
- 19. Atomikos vs JOTM vs Bitronix vs?
- 20. inline vs __inline vs __inline__ vs __forceinline?
- 21. JRuby:import vs include vs java_import vs include_class
- 22. VS 2013 MSTest vs nUnit vs xUnit
- 23. SDI vs MDI vs TDI vs?
- 24. `Math.trunc` vs`| 0` vs`<<0` vs `>> 0` vs`&-1` vs`^ 0`
- 25. Stackpanel:高度vs ActualHeight vs ExtentHeight vs ViewportHeight vs DesiredSize vs RenderSize
- 26. LinkedBlockingQueue vs vs offer
- 27. MPAPI vs MPI.NET vs?
- 28. &vs *和| vs +
- 29. Quartz.NET vs JAMS vs?
- 30. NetSqlAzMan vs AzMan vs(?????)
http://en.wikipedia。org/wiki/Datalog – starblue 2010-10-13 14:27:22