2011-07-13 24 views
7

如何在Prolog中編寫以下內容?如何在Prolog中編寫「a暗示b或c」

a -> b V c 

在英語中,這將是a implies that b or c (or both)

+0

我用錯了嗎?答案似乎表示暗示不是正確的術語。是不是所有(大部分)prolog子句都被讀爲某種東西暗示其他東西('something_else:-something.')?我沒有用英語學習Prolog,所以我可能會用錯句子。 – baruch

回答

6

子句

a => (b ; c)  % ';' means 'or' 

不是一個角子句,因此不能在(純)的Prolog表示(參見例如Wikipedia)。另一方面,(b ; c) => a是一個Horn子句,顯然可以用兩個Prolog規則表示。

+0

我不熟悉';'。你能解釋一下它是什麼嗎?這兩個條款是什麼意思? – baruch

+0

我用';'來表示'或'(=分離),即你的'v'符號。我選擇它是因爲它是許多Prolog解釋器中預定義的「或」運算符。所以,你可以寫'a: - b; c.'意味着'(b或c)暗示a''。你不能表達'暗示(b或c)'。 – Jiri

0

從邏輯上講,「B或C」是一回事「B或C(或兩者)」

您可以閱讀序言關於邏輯運算符這裏:http://rigaux.org/language-study/syntax-across-languages-per-language/Prolog.html

你能解釋多一點請你想要做什麼'隱含'?

+0

我的意思是像'a:-b,c.'意味着'b和c意味着'',但另一種方式。非正式地說,那將是'b,c:-a.' – baruch

+0

如果在那之後,我問'?-b.'或'?-c.'我應該得到錯誤或未知或某些,但是如果我也有'd: -b。 d:-c.'然後'?-d.'應該是真的。 – baruch

+0

你可以寫兩個條款 b: - a。 c: - a。 –

1

我不完全確定你想要做什麼與這意味着聲明。但是我會認爲以下幾點就足夠了(記住這是SICStus不是swi的,但是在這個低層我覺得它們都是一樣的)。

predicate(a, b). 
predicate(a, c). 

?- predicate(a, Then). 
Then = b ; 
Then = c ; 
no 

?- predicate(x, Then). 
no 

你可以做更復雜的檢查,以確保一個從來未綁定值(爲防止predicate(If, b)。是真的),但除非你正在做一個巨大的應用那麼我敢肯定,良好的文檔就足夠了。

相關問題