На основании вашего запроса
suspect(Killer, mrBoddy) :-
affair(mrBoddy, Y),
married(X,Y),
write('Killer= '),
write(X), nl;
greedy(X),
write('Killer= '),
write(X), nl.
, который является запросом ИЛИ (; / 2 ), в действительности существует два запроса в одном.
Поскольку переменная Killer
является одним из параметров запроса, нет необходимости добавлять операторы записи
write('Killer= '),
write(X),
nl
В предикате вы жестко закодировали второй параметр,mrBoddy
,
suspect(Killer, mrBoddy)
Пролог запускает переменные с заглавными буквами и значения с строчными.
Первый запрос -
suspect_1(Killer, mrBoddy) :-
affair(mrBoddy, X),
married(Killer,X).
, для которого результатis
?- suspect_1(Killer,mrBoddy).
Killer = profPlum ;
false.
Второй запрос
suspect_2(Killer, mrBoddy) :-
greedy(Killer).
, для которого результат
?- suspect_2(Killer,mrBoddy).
Killer = colMustard.
Я хочу добавить факт, который изменитвывод только на одного "убийцу".
Поскольку вы разрешаете изменять только факты, а запрос является запросом ИЛИ, который работает, независимо от того, сколько фактов вы добавите, вы всегда получите как минимум два ответа.
Вы можете изменить запрос или удалить факт.
Если вы хотите задать дополнительные вопросы, пожалуйста, задавайте новые вопросы.