我想在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).
我想添加一个事实,它将输出更改为仅一个“杀手”。不管是谁。我该如何实现?
答案 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查询,因此无论您添加多少事实,您始终将至少获得两个答案。
您可以更改查询或删除事实。
如果您想提出其他问题,请发表新问题。