Подсказка
Четверо гостей (полковник Мастард, профессор Плам, мисс Скарлетт, мисс Грин) посещают званый обед в доме мистера Бодди. Внезапно гаснет свет! Когда они возвращаются, мистер Бодди лежит мертвый посреди стола. Каждый является подозреваемым. При дальнейшем рассмотрении выясняются следующие факты:
- У мистера Бодди был роман с мисс Грин.
- Профессор Плам женат на мисс Грин.
- Мистер Бодди был очень богат.
- Полковник Мастард очень жаден.
- У мисс Скарлетт также был роман с мистером Бодди.
Возможны два мотива убийства:
- Ненависть: кто-то ненавидит кого-то другого, если у этого другого человека роман с его/ее супругом.
- Жадность: Кто-то готов совершить убийство, если он жаден и не богат, а жертва богата.
Часть A: Запишите приведенные выше факты и правила в своей программе на Прологе. Используйте следующие имена для людей: colMustard, profPlum, missScarlet, msGreen, mrBoddy. Будьте осторожны с тем, как вы кодируете (или не кодируете) симметричные отношения, такие как брак — вам не нужны бесконечные циклы! married(X,Y) :- married(Y,X) % INFINITE LOOP
?-suspect(Killer,mrBoddy)
Killer = suspect_name_1
Killer = suspect_name_2
etc.
Часть Б: Напишите предикат, подозреваемый/2, который определяет, кто может быть подозреваемым, т. е. у кого был мотив.
?-suspect(Killer,mrBoddy)
Killer = unique_suspect.
Часть C: Добавьте один факт в свою базу данных, который приведет к появлению уникального подозреваемого. Четко укажите эту строку в комментариях к исходному тексту, чтобы ее можно было удалить/добавить для оценивания.
?-suspect(Killer,mrBoddy)
Killer = unique_suspect.
Всякий раз, когда я печатаю
suspect(Killer,mrBoddy).
я получил
suspect(Killer,mrBoddy).
Killer = profPlum
я скучаю
Killer = colMustard.
Вот мой источник.
%8) Clue
%facts
affair(mrBoddy,msGreen).
affair(missScarlett, mrBoddy).
affair(X,Y) :- affair(X,Y), affair(Y,X).
married(profPlum, msGreen).
married(X,Y) :- married(X,Y), married(Y,X).
rich(mrBoddy).
greedy(colMustard).
%rules
hate(X,Y) :- married(X,Spouse), affair(Y,Spouse).
greed(X,Y) :- greedy(X), not(rich(X)), rich(Y).
%suspect
suspect(X,Y):- hate(X,Y).
suspect(X,Y):- greed(X,Y).