小编Had*_*oto的帖子

Prolog中的爱因斯坦之谜

我正试图用Prolog解决爱因斯坦之谜.任务是

  1. 挪威人居住在第一所房子里.
  2. 英国人住在红楼.
  3. 瑞典有狗作为宠物.
  4. 丹麦人喝茶.
  5. 绿屋位于白宫的左侧.
  6. 住在温室里的男人喝咖啡.
  7. 抽烟Pall Mall的男人饲养鸟类.
  8. 住在黄屋的那个人抽烟了登喜路.
  9. 住在中楼的男人喝牛奶.
  10. 抽烟的人混合生活在有猫的人旁边.
  11. 养马的男人住在吸烟登喜路的旁边.
  12. 抽烟师傅的男人喝啤酒.
  13. 德国人抽烟王子.
  14. 挪威人居住在蓝屋旁边.
  15. 抽烟混合的男人是喝水的邻居.
  16. 有人有一个带鱼的水族馆.

该程序:

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)

prolog zebra-puzzle

1
推荐指数
1
解决办法
562
查看次数

标签 统计

prolog ×1

zebra-puzzle ×1