1
我試圖用Prolog來解決愛因斯坦的謎題。任務是愛因斯坦在Prolog中的拼圖
- 挪威人住在第一宮。
- 英國人住在紅樓。
- 瑞典HAS狗作爲寵物。
- 丹麥人喝茶。
- 綠屋位於白宮左側。
- 住在溫室裏的男人喝咖啡。
- 抽菸的波爾購物中心的男人會養鳥。
- 住在黃房子裏的男人吸菸登喜路。
- 住在中間房子的人喝牛奶。
- 吸菸Blends的男人住在有貓的人旁邊。
- 保持馬匹的人與吸菸的登喜路住在一起。
- 抽藍色大師的人喝啤酒。
- 德國人吸菸王子。
- 挪威人住在藍屋旁邊。
- 抽Blends的男人是喝水的人的鄰居。
- 有人有一個魚缸。
程序:
neighbor(Rua):-
length(Rua, 5),
Rua = [casa(_,noruegues,_,_,_)|_],
member(casa(vermelha,ingles,_,_,_),Rua),
member(casa(_,sueco,_,_,cachorros),Rua),
member(casa(_,dinamarques,cha,_,_),Rua),
esquerda(casa(verde,_,_,_,_), casa(branca,_,_,_,_),Rua),
member(casa(verde,_,cafe,_,_),Rua),
member(casa(_,_,_,pallmall,passaros),Rua),
member(casa(amarela,_,_,dunhill,_),Rua),
Rua = [_,_,casa(_,_,leite,_,_),_,_],
ao_lado(casa(_,_,_,blends,_), casa(_,_,_,_,gatos),Rua),
ao_lado(casa(_,_,_,_,cavalos), casa(_,_,_,dunhill,_),Rua),
member(casa(_,_,cerveja,bluemaster,_),Rua),
member(casa(_,alemao,_,prince,_),Rua),
ao_lado(casa(_,noruegues,_,_,_), casa(azul,_,_,_,_),Rua),
ao_lado(casa(_,_,_,blends,_), casa(_,_,agua,_,_),Rua),
member(casa(_,_,_,_,peixes),Rua).
ao_lado([X,Y|_],X, Y).
ao_lado([X,Y|_],Y, X).
ao_lado([_|L],X, Y):-
ao_lado(L, X, Y).
esquerda([A|As], A, E) :-
member2(E, As).
esquerda([_|As], A, E) :-
esquerda(As, A, E).
的可能的複製[愛因斯坦裏德爾用術語的列表](http://stackoverflow.com/questions/36743498/einstein-riddle -with-列表中的字詞) –