我正试图用Prolog解决爱因斯坦之谜.任务是
- 挪威人居住在第一所房子里.
- 英国人住在红楼.
- 瑞典有狗作为宠物.
- 丹麦人喝茶.
- 绿屋位于白宫的左侧.
- 住在温室里的男人喝咖啡.
- 抽烟Pall Mall的男人饲养鸟类.
- 住在黄屋的那个人抽烟了登喜路.
- 住在中楼的男人喝牛奶.
- 抽烟的人混合生活在有猫的人旁边.
- 养马的男人住在吸烟登喜路的旁边.
- 抽烟师傅的男人喝啤酒.
- 德国人抽烟王子.
- 挪威人居住在蓝屋旁边.
- 抽烟混合的男人是喝水的邻居.
- 有人有一个带鱼的水族馆.
该程序:
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).
Run Code Online (Sandbox Code Playgroud)