2013-02-11 61 views
1

我在序言中有以下事實。症狀(A,B,C):在區域B的症狀中可以通過病毒(英文縮寫,全稱)結構事實的序言規則

symptom(delirium,mind,virus(rbs, rabies)). 
symptom(delirium,mind,virus(tbe, tick-borne-encephalitis)). 
symptom(discomfort,mind,virus(rbs, rabies)). 
... 

我要問什麼類型的病毒,例如可以引起特定的症狀引起的。爲此,我想聲明一個規則'causedBy(X,Y)',在查詢中我可以發送症狀,並給出可能的病毒列表。

問題是如何才能發送症狀並獲得的列表可能的病毒的縮寫?

回答

1

你可以這樣說:

causedBy(X,Y) :- symptom(X, _, virus(Y, _)). 

demo in SWI Prolog on ideone)。

統一的過程是遞歸的,您可以根據需要嵌入名稱,以便與您的事實統一起來。在這種情況下,virus(Y, _)嵌套在symptom/3調用中,僅「提取」virus對的第一個元素。