許多程序員在大學學習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. Prolog平放蓄電池vs孔
- 2. vs vs 2008 vs vs 2010
- 3. Exec的VS ExecWait VS ExecShell VS nsExec :: Exec的VS nsExec :: ExecToLog VS nsExec :: ExecToStack VS ExecDos VS ExeCmd
- 4. CGL vs AGL vs OpenGL vs NSOpenGL vs CoreAnimation(CALayer)
- 5. VS VS VS VS 11中的MVC測試
- 6. MobileNet VS SqueezeNet VS ResNet50 VS啓V3 VS VGG16
- 7. NTOSKRNL.EXE VS NTKRNLMP.EXE VS NTKRNLPA.EXE VS NTKRPAMP.EXE
- 8. .NET vs ASP.NET vs CLR vs ASP
- 9. JRuby:import vs include vs java_import vs include_class
- 10. codendi vs redmine vs Retrospectiva vs trac
- 11. inline vs __inline vs __inline__ vs __forceinline?
- 12. VS 2008 vs VS 2008 Express
- 13. SDI vs MDI vs TDI vs?
- 14. Atomikos vs JOTM vs Bitronix vs?
- 15. RailwayJS vs Geddy vs Express vs Socket.IO
- 16. Quartz.NET vs JAMS vs?
- 17. MPAPI vs MPI.NET vs?
- 18. NetSqlAzMan vs AzMan vs(?????)
- 19. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase,他們有什麼共同點?
- 20. AsyncTask vs Activity.runOnUiThread()vs Handler.post()
- 21. ivalueconverter vs system.converter vs delegate
- 22. managedQuery()vs context.getContentResolver.query()vs android.provider.something.query()
- 23. Sys.require vs Sys.loadscripts vs Sys.loader
- 24. setOnclickListener VS OnClickListener VS View.OnClickListener
- 25. RhinoMock:Mocks VS StrictMocks VS DynamicMocks
- 26. CURL vs fopen vs fsocketopen?
- 27. unittest vs pytest vs nose
- 28. JPA vs ORM vs Hibernate?
- 29. Unity vs Udk vs CryEngine
- 30. Zabbix vs grafana vs kibana
http://en.wikipedia。org/wiki/Datalog – starblue 2010-10-13 14:27:22