1

我在 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)).
...

我想问一下什么类型的病毒可以引起特定的症状。为此,我想声明一个规则'causedBy(X,Y)',在查询中我可以发送症状,它给了我可能的病毒列表。

问题是我怎样才能只发送症状并获得可能病毒的唯一缩写列表?

4

1 回答 1

1

你可以这样做:

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

ideone 上 SWI Prolog 中的演示)。

统一的过程是递归的,您可以根据需要将名称嵌套到与事实统一的深度。在这种情况下,virus(Y, _)嵌套在symptom/3调用中以仅“提取”该virus对的第一个元素。

于 2013-02-11T04:17:25.913 回答