Prolog中的线索游戏

时间:2015-04-11 20:17:21

标签: prolog

所以我应该重新创建游戏线索的一个小实现。

我获得了一系列事实,并且必须输出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).

1 个答案:

答案 0 :(得分:1)

很明显suspect_found/1谓词有多个解决方案(因为在其正文中使用了分号;)并且它没有使用任何其他谓词(规则和事实)你的计划。因此,它的第一个答案是profPlum并且通过回溯也是很自然的 收益率missScarletmsGreencolMustard