我在Prolog中有以下事实。症状(A,B,C):B区症状A可由病毒C(缩写,全名)引起
symptom(delirium,mind,virus(rbs, rabies)).
symptom(delirium,mind,virus(tbe, tick-borne-encephalitis)).
symptom(discomfort,mind,virus(rbs, rabies)).
...
我想问一下什么类型的病毒会导致某种特定症状。为此,我想声明一个规则'causeBy(X,Y)'在查询中我可以发送症状,它给了我可能的病毒列表。
问题是如何才能发送症状并获取可能病毒的仅缩写列表?
答案 0 :(得分:1)
你可以这样做:
causedBy(X,Y) :- symptom(X, _, virus(Y, _)).
(demo in SWI Prolog on ideone)。
统一的过程是递归的,您可以根据需要深入挖掘名称以统一事实。在这种情况下,virus(Y, _)
嵌套在symptom/3
调用"提取"只有virus
对的第一个元素。