2010-10-13 56 views
17

許多程序員在大學學習Prolog,但只有很少。我知道Prolog和Datalog密切相關,但Datalog更簡單?另外,我相信我讀到Datalog不依賴於邏輯子句的排序,但我不確定爲什麼這是優點。據推測CLIPS是完全不同的,但對我來說這太微妙了。有人可以提供其他語言的語言的一般亮點嗎?Datalog vs CLIPS vs Prolog

+0

http://en.wikipedia。org/wiki/Datalog – starblue 2010-10-13 14:27:22

回答

15

datalog是prolog的子集。該數據記錄攜帶子心中都有兩件事情:

  1. 採用將支持規則和查詢
  2. 確保所有查詢終止

序言的API是圖靈完備。數據記錄不是。讓我們看看prolog如何與剪輯進行比較。

prolog的專長是「解決問題」,而剪輯是一個「專家系統」。如果我理解正確,「解決問題」涉及使用代碼和數據的專業知識。 「專家系統」大多使用數據結構來表達專業知識。看到http://en.wikipedia.org/wiki/Expert_system#Comparison_to_problem-solving_systems

另一種方式來看待它是:

專家系統的前提下,大部分(如果不是全部)的結果是已知的操作。所有這些結果都彙編成數據,然後送入專家系統。給專家系統一個場景,專家系統從編譯的數據計算結果,也就是知識庫。它總是一個「偶數加偶數總是偶數」的想法。

問題解決系統對問題的看法不完整。所以人們開始建模數據和行爲,這將構成知識庫(這給了「角落案例」一詞的正義),並最終以「如果我們加兩到六,最後八加八。兩個?那麼它甚至是「

+1

相對於Prolog,Datalog沒有函數符號(因此沒有使用面向樹的結構,只是常量和變量),並且是純粹聲明式的(沒有剪切,也沒有通過重新排列子句來改變行爲)。 – 2015-01-07 18:49:20

+2

對於CLIPS(具有OPS5祖先的生產系統),想法是在事實數據庫中與現有事實匹配時「推斷」新事實(或觸發動作),並且事實數據庫可在計算過程中更改。這是「hacky/scruffy」和弱的理論。對於Prolog來說,這個哲學是「證明」一個來自數據庫中已知含義和事實的定理,它不應該改變!這是基於合理的理論(基於Horn子句的一階邏輯),可以通過拉入語言的「非邏輯」元素(類似於將GOTO添加到漂亮的代碼中)來隨意削弱。 – 2015-01-07 18:51:40

+0

......最後,你可以在Prolog中實現前向鏈接。 – 2015-01-07 18:52:21

21

CLIPS和前導/數據記錄之間的區別在於,CLIPS是一種「生產規則系統」,通過運行正向推理:給定一組事實和規則,它會嘗試讓新的事實每一個可能的推導和將這些存儲在內存中。然後通過檢查它是否匹配事實存儲庫中的某個東西來回答查詢。所以,在剪輯,如果你有(僞語法):

parent(X,Y) => child(Y,X) 
parent(john,mary) 

它會立即獲得child(mary,john)並記住這個事實。這可能非常快,但會限制可能的規則集並佔用內存。

序言和數據記錄操作反向鏈接,這意味着通過試圖證明查詢,即運行Prolog/Datalog程序來回答查詢(謂詞調用)。 Prolog是一個圖靈完整的編程語言,所以任何算法都可以在其中實現。

Datalog是Prolog的非Turing完整子集,不允許例如否定。它的主要優點是每個Datalog程序都終止(沒有無限循環)。這對於所謂的「演繹數據庫」是有用的,即具有除事實以外的規則的數據庫。

+4

特別是,Datalog是用於「查詢關係數據庫」的,相當於遞歸SQL。參見[本介紹](http://webdam.inria.fr/College/090512Abiteboul.pdf)。 [Datomic]數據庫支持Datalog查詢。 – 2015-01-07 18:36:34

+1

與Prolog不同,datalog的語義中沒有任何內容指定反向鏈接。向前和向後鏈可以被使用。 – seanmcl 2015-10-09 22:28:05

+0

@seanmcl使用[約束處理規則](https://en.wikipedia.org/wiki/Constraint_Handling_Rules),Prolog中也可以使用正向鏈接。 – 2017-02-12 06:14:08

相關問題