具有结构的事实的Prolog规则

时间:2013-02-11 04:11:07

标签: prolog

我在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)'在查询中我可以发送症状,它给了我可能的病毒列表。

问题是如何才能发送症状并获取可能病毒的缩写列表?

1 个答案:

答案 0 :(得分:1)

你可以这样做:

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

demo in SWI Prolog on ideone)。

统一的过程是递归的,您可以根据需要深入挖掘名称以统一事实。在这种情况下,virus(Y, _)嵌套在symptom/3调用"提取"只有virus对的第一个元素。