我试图解决使用Prolog的爱因斯坦谜语。 任务
- 挪威人住在第一间房子。
- 英国人住在红房子。
- 瑞典有狗作为宠物饲养。
- 丹麦喝茶。
- 绿房子是白宫的左边。
- 谁住在绿房子的人喝咖啡。
- 谁抽Pall Mall香烟的人养鸟。
- 该名男子居住在黄房子抽Dunhill香烟。
- 谁住在房子中的牛奶饮料的人。
- 谁抽烟共混物中的人生活旁边谁拥有猫的人。
- 谁养马的人住旁边给谁抽Dunhill香烟的人。
- 谁吸烟蓝法师的人喝啤酒。
- 德国人抽Prince香烟。
- 旁边的蓝屋侧,挪威人住。
- 谁吸烟共混物的人是谁喝水的一个邻居的做。
- 有人做过一个水族馆鱼。
该程序:
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).