ヒント
4人のゲスト(マスタード大佐、プラム教授、スカーレット嬢、グリーンさん)がボディ氏の家でのディナーパーティーに出席します。突然、ライトが消える!彼らが戻ってきたとき、ボディ氏はテーブルの真ん中で死んで横たわっていました。誰もが容疑者です。さらに詳しく調べると、次の事実が明らかになります。
- ボディ氏はグリーンさんと浮気をしていた。
- プラム教授はグリーンさんと結婚しています。
- ボディ氏はとても裕福でした。
- マスタード大佐はとても貪欲です。
- ミス・スカーレットもボディ氏と浮気をしていた。
殺人の動機として考えられるのは、次の 2 つです。
- 憎しみ: 相手が自分の配偶者と関係を持っている場合、誰かがその人を憎みます。
- 貪欲:貪欲で金持ちではなく、犠牲者が金持ちであれば、誰かが喜んで殺人を犯します.
パート A: 上記の事実とルールを Prolog プログラムに記述します。人には次の名前を使用します: 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.
パート B: 被疑者が誰であるか、つまり誰に動機があるかを判断する述語、suspect/2 を書きます。
?-suspect(Killer,mrBoddy)
Killer = unique_suspect.
パート C: データベースに 1 つのファクトを追加して、一意の容疑者を作成します。採点のために削除/追加できるように、ソース コメントにこの行を明確に示してください。
?-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).