0

我正在为大学做一个有点像线索游戏的序言程序。我有六个具有不同特征的嫌疑人:

suspect(Name, Age, Weapon, Shape, Object, Shoes)

目标是实施一系列线索,以便程序说出所有六名嫌疑人的不同特征。例如:

suspect(Hannibal Lecter,67,knife,'in good shape',mac,'high heels')

我在尝试执行线索时遇到问题

or(suspect1, suspect2, suspect3, listOfSuspects)

这条线索应该说与ORsuspect1具有相同的特征,但不是两者兼而有之。示例:表示 50 岁的嫌疑人有戒指或 mac,但不是两者都有:suspect2suspect3

or(suspect(_, 50, _, _, _, _),
   suspect(_, _, _, _, ring, _),
   suspect(_, _, _, _, mac, _), listOfSuspects).

任何帮助,将不胜感激。

4

1 回答 1

0

这里有一些提示。您可以声明具有与bySuspect1相同的特征,并找出列表中的任何成员是否具有by的特征。Suspect2Suspect1 = Suspect2SuspectsSuspect1member(Suspect1, Suspects)

在 Prolog 中处理析取的常用方法是引入一个带有两个子句的谓词。例如,检查嫌疑人是否有戒指或 mac 的谓词是

ring_or_mac(suspect(_, _, _, _, ring, _)).
ring_or_mac(suspect(_, _, _, _, mac, _)).

如果您以正确的方式将这些提示组合在一起,您就有了解决问题的方法。

于 2013-05-16T20:28:31.083 回答