Prolog If陈述事实

时间:2018-11-26 03:34:56

标签: prolog

我想在Prolog数据库中声明一个独特的事实,以更改if语句的结果。

我的代码如下:

suspect(Killer, mrBoddy) :-
    affair(mrBoddy, Y),
    married(X,Y),
    write('Killer= '),
    write(X), nl;
    greedy(X),
    write('Killer= '),
    write(X), nl.

输出为

?- suspect(Killer, mrBoddy).                                      
Killer= profPlum

true ? ;
Killer= colMustard

yes

我的事实

affair(mrBoddy, msGreen).
affair(mrBoddy,missScarlet).
married(profPlum, msGreen).

rich(mrBoddy).
greedy(colMustard).
motive_to_kill_affair(profPlum).
motive_to_kill_greed(colMustard).

我想添加一个事实,它将输出更改为仅一个“杀手”。不管是谁。我该如何实现?

1 个答案:

答案 0 :(得分:0)

根据您的查询

suspect(Killer, mrBoddy) :-
    affair(mrBoddy, Y),
    married(X,Y),
    write('Killer= '),
    write(X), nl;
    greedy(X),
    write('Killer= '),
    write(X), nl.

这是一个OR查询(;/2),实际上有两个查询。

由于变量Killer是查询的参数之一,因此无需添加写语句

    write('Killer= '),
    write(X), 
    nl

在谓词中,您已经硬编码了第二个参数mrBoddy

suspect(Killer, mrBoddy)

Prolog以大写字母开头的变量和以小写字母开头的值。

第一个查询是

suspect_1(Killer, mrBoddy) :-
    affair(mrBoddy, X),
    married(Killer,X).

结果为

?- suspect_1(Killer,mrBoddy).
Killer = profPlum ;
false.

第二个查询是

suspect_2(Killer, mrBoddy) :-
    greedy(Killer).

结果为

?- suspect_2(Killer,mrBoddy).
Killer = colMustard.
  

我想添加一个事实,它将输出更改为仅一个“杀手”。

由于您只允许更改事实,并且查询是有效的OR查询,因此无论您添加多少事实,您始终将至少获得两个答案。

您可以更改查询或删除事实。

如果您想提出其他问题,请发表新问题。