Пролог Если констатация факта - PullRequest
0 голосов
/ 26 ноября 2018

Я хочу указать уникальный факт в моей базе данных 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 голосов
/ 26 ноября 2018

На основании вашего запроса

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.

Я хочу добавить факт, который изменитвывод только на одного "убийцу".

Поскольку вы разрешаете изменять только факты, а запрос является запросом ИЛИ, который работает, независимо от того, сколько фактов вы добавите, вы всегда получите как минимум два ответа.

Вы можете изменить запрос или удалить факт.

Если вы хотите задать дополнительные вопросы, пожалуйста, задавайте новые вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...