线索
四位客人(Mustard 上校、Plum 教授、Scarlett 小姐、Green 女士)参加了在 Boddy 先生家中的晚宴。突然,灯灭了!当他们回来时,博迪先生死在桌子中间。每个人都是嫌疑人。经过进一步检查,以下事实浮出水面:
- 博迪先生与格林女士有染。
- 普拉姆教授与格林女士结婚。
- 博迪先生非常富有。
- 芥末上校非常贪婪。
- 斯嘉丽小姐也和博迪先生有染。
谋杀有两种可能的动机:
- 仇恨:如果另一个人与他/她的配偶有染,那么这个人就会讨厌另一个人。
- 贪婪:如果有人贪婪而不富有,而受害者是富有的,他们愿意杀人。
A 部分:在你的 Prolog 程序中写下上述事实和规则。使用以下人员名称:colMustard、profPlum、missScarlet、msGreen、mrBoddy。小心你如何编码(或不编码)对称关系,比如婚姻——你不想要无限循环!married(X,Y) :- married(Y,X) % INFINITE LOOP
?-suspect(Killer,mrBoddy)
Killer = suspect_name_1
Killer = suspect_name_2
etc.
B 部分:写一个谓词,suspect/2,确定嫌疑人可能是谁,即谁有动机。
?-suspect(Killer,mrBoddy)
Killer = unique_suspect.
C 部分:将一个事实添加到您的数据库中,这将导致存在一个独特的嫌疑人。在您的源注释中清楚地指出这一行,以便可以将其删除/添加以进行评分。
?-suspect(Killer,mrBoddy)
Killer = unique_suspect.
每当我输入
suspect(Killer,mrBoddy).
我明白了
suspect(Killer,mrBoddy).
Killer = profPlum
我迷路了
Killer = colMustard.
这是我的来源。
%8) Clue
%facts
affair(mrBoddy,msGreen).
affair(missScarlett, mrBoddy).
affair(X,Y) :- affair(X,Y), affair(Y,X).
married(profPlum, msGreen).
married(X,Y) :- married(X,Y), married(Y,X).
rich(mrBoddy).
greedy(colMustard).
%rules
hate(X,Y) :- married(X,Spouse), affair(Y,Spouse).
greed(X,Y) :- greedy(X), not(rich(X)), rich(Y).
%suspect
suspect(X,Y):- hate(X,Y).
suspect(X,Y):- greed(X,Y).