所以我应该重新创建游戏线索的一个小实现。
我获得了一系列事实,并且必须输出Prolog发现的可能的嫌疑人名单。鉴于一个独特的"怀疑,该程序应该只输出发现的唯一嫌疑人。
我已经完成了所有的逻辑,现在我只是很难找到如何阻止程序找到嫌疑人,当我给它时," unique"可疑事实。
我可以从另一只眼睛那里得到一些帮助,看看我在哪里出错,我的初学者熟练程度让我感到困惑,如何让它停止或组织切割以使其停止。
以下是代码:
%% Facts
rich(mrBoddy).
affair_with(msGreen, mrBoddy).
affair_with(missScarlet, mrBoddy).
married_to(profPlum, msGreen).
greedy(colMustard).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Rules
affair(X, Y) :- affair_with(X, Y).
affair(X, Y) :- affair_with(Y, X), !.
married(X, Y) :- married_to(X, Y).
married(X, Y) :- married_to(Y, X), !.
greed(X, Victim) :-
greedy(X),
not(rich(X)),
rich(Victim).
hate(X, Victim) :-
married(X, Someone),
affair(Someone, Victim).
murder(X, Victim) :-
hate(X, Victim);
greed(X, Victim).
%%% THIS IS THE UNIQUE SUSPECT FACT--- suspect_found(profPlum).
suspect_found(X) :-
X = profPlum;
X = missScarlet;
X = msGreen;
X = colMustard.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Solution
suspect(Killer, mrBoddy) :-
murder(Killer, mrBoddy),
suspect_found(Killer).
答案 0 :(得分:1)
很明显suspect_found/1
谓词有多个解决方案(因为在其正文中使用了分号;
)并且它没有使用任何其他谓词(规则和事实)你的计划。因此,它的第一个答案是profPlum
并且通过回溯也是很自然的
收益率missScarlet
,msGreen
和colMustard
。