Skip to content

Instantly share code, notes, and snippets.

@yycking
Created March 26, 2019 10:23
Show Gist options
  • Select an option

  • Save yycking/4ddf152c581302cc69677716fd8b2ece to your computer and use it in GitHub Desktop.

Select an option

Save yycking/4ddf152c581302cc69677716fd8b2ece to your computer and use it in GitHub Desktop.
% 博迪先生死於謀殺,
% 現有六個嫌疑犯,
% 每個人在不同的房間,
% 每間房間各有一件可能的凶器,但不知道嫌疑犯、房間、凶器的對應關系。請根據下面的條件和線索,找出誰是凶手。
% 已知條件:
% 六個嫌疑犯是三男 喬治、約翰、羅伯特;三女 芭芭拉、克里斯汀、約蘭達。
男人(喬治). 男人(約翰). 男人(羅伯特).
女人(芭芭拉). 女人(克里斯汀). 女人(約蘭達).
嫌疑犯(X):- 男人(X).
嫌疑犯(X):- 女人(X).
證詞(A,B,C,D,E,F):-
嫌疑犯(A), 嫌疑犯(B), 嫌疑犯(C), 嫌疑犯(D), 嫌疑犯(E), 嫌疑犯(F),
A\=B, A\=C, A\=D, A\=E, A\=F,
B\=C, B\=D, B\=E, B\=F,
C\=D, C\=E, C\=F,
D\=E, D\=F,
E\=F.
證據(A,B,C,D,E,F):-
證詞(A,B,C,D,E,F).
% 線索一:廚房裡面是一個男人,那裡的凶器不是繩索、小刀、袋子和手槍。
線索一(In廚房, Has繩索, Has小刀, Has袋子, Has手槍):-
男人(In廚房),
In廚房\=Has繩索, In廚房\=Has小刀, In廚房\=Has袋子, In廚房\=Has手槍.
% 線索二:芭芭拉 和 約蘭達 在浴室和書房。
線索二(In浴室, In書房):-
芭芭拉=In浴室, 約蘭達=In書房.
線索二(In浴室, In書房):-
約蘭達=In浴室, 芭芭拉=In書房.
% 線索三:帶袋子的那個人不是 芭芭拉 和 喬治,也不在浴室和飯廳。
線索三(Has袋子, In浴室, In餐廳):-
芭芭拉\=Has袋子, 喬治\=Has袋子,
Has袋子\=In浴室, Has袋子\=In餐廳.
% 線索四:書房裡面是一個帶繩子的女人。
線索四(In書房, Has繩索):-
女人(Has繩索), Has繩索=In書房.
% 線索五:起居室裡面那件凶器,與 喬治 或 約翰 在一起。
線索五(In起居室):-
喬治=In起居室.
線索五(In起居室):-
約翰=In起居室.
% 線索六:刀子不在飯廳。
線索六(In餐廳, Has小刀):-
In餐廳\=Has小刀.
% 線索七:書房和食品儲藏室裡面的凶器,沒跟 約蘭達 在一起。
線索七(In儲藏室, In書房):-
In儲藏室\=約蘭達, In書房\=約蘭達.
% 線索八:喬治 所在的那間屋子有火手槍。
線索八(Has手槍):-
喬治=Has手槍.
% 線索九:博迪先生死在食品儲藏室裡,那裡的凶器是瓦斯。
線索九(Has瓦斯, In儲藏室, Who凶手):-
Who凶手=Has瓦斯,
Who凶手=In儲藏室.
推理:-
% 六個嫌疑犯分別待在六個房間:浴室、餐廳、廚房、起居室、儲藏室、書房。
% 每間房間都有一件可疑的物品,可以當作凶器:袋子、手槍、瓦斯、小刀、毒藥、繩索。
證詞(In浴室, In餐廳, In廚房, In起居室, In儲藏室, In書房),
證據(Has袋子, Has手槍, Has瓦斯, Has小刀, Has毒藥, Has繩索),
線索一(In廚房, Has繩索, Has小刀, Has袋子, Has手槍),
線索二(In浴室, In書房),
線索三(Has袋子, In浴室, In餐廳),
線索四(In書房, Has繩索),
線索五(In起居室),
線索六(In餐廳, Has小刀),
線索七(In儲藏室, In書房),
線索八(Has手槍),
線索九(Has瓦斯, In儲藏室, Who凶手),
write("浴室:"), write(In浴室), nl,
write("餐廳:"), write(In餐廳), nl,
write("廚房:"), write(In廚房), nl,
write("書房:"), write(In書房), nl,
write("起居室:"), write(In起居室), nl,
write("儲藏室:"), write(In儲藏室), nl,
write("袋子:"), write(Has袋子), nl,
write("手槍:"), write(Has手槍), nl,
write("瓦斯:"), write(Has瓦斯), nl,
write("小刀:"), write(Has小刀), nl,
write("毒藥:"), write(Has毒藥), nl,
write("繩索:"), write(Has繩索), nl,
write("凶手:"), write(Who凶手), nl.
main:-
推理, halt.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment