2012-01-24 24 views
0

我必須在我的prolog程序中編寫語句Apple暗示紅色或綠色的語句。下面是我實現的代碼示例:在Prolog中表示和或功能

:-dynamic(red/1). 

:-dynamic(green/1). 

apple(a). 

apple(b). 

apple(A):-red(A);green(A). 

我的問題是?- red(a)?-green(a)應該返回false,因爲這不是一個給定的事實,我把他們的動態,現在?-red(a)?-green(a)也返回false。 因爲蘋果是紅色或綠色

感謝您的答覆但是red(A);green(A).應返回true:但是我整個問題是 - 紅(a)和綠色(一)被分開時,都跑去向surpose返回false。而?-red(a); green(a)應該返回true。這是我迷失的地方。如果您有任何關於如何獲得結果的建議,我們將非常歡迎。

+0

爲你回覆謝謝你們: –

+0

@ChrisMartin:您的編輯沒有太大的改善... – false

回答

0

如果您考慮: - 意思是「由......暗示」或「如果是」,那麼您可以看到您的最終規則倒退(即,如果有東西是紅色或綠色,那麼它是蘋果)。此外,Prolog不會讓你繪製包含OR的推論。因此,你能來最接近的是:

red(X) :- apple(X). 
green(X) :- apple(X). 

也就是說,什麼是紅色的,如果它是一個蘋果,東西是綠色的,如果它是一個蘋果。是的,這意味着如果它是一個蘋果,你可以證明它是紅色和綠色,但你也沒有,它會滿足你的要求red(A); green(A)成功(A是蘋果的東西)。如果您要求red(A)green(A)不能同時爲真,那需要更多的工作。

+0

感謝你們爲您回覆:但是我整個問題是 - 紅(a)和綠色(一)都是在?-red(a);綠色(a)應該返回true時返回false。這是我迷失的地方。如果你們有任何關於如何到達那裏的建議,我們將非常歡迎。那 –

+0

如果紅色(a)或綠色(a)都不是單獨的,那麼紅色(a)或綠色(a)如何成爲真?你可以制定一條規則,如果它是紅色或綠色,但它必須是其中的一個,而不同的蘋果可以是不同的顏色,那麼這個規則就像你說的那樣。 –