前言里的爱因斯坦谜题



我正在尝试用Prolog解决爱因斯坦之谜。任务是

    挪威人住在第一所房子里。The English lives in The Red House .
  1. 瑞典人养狗当宠物。
  2. 丹麦人喝茶。
  3. 绿屋在白宫的左边
  4. 住在温室里的人喝咖啡。抽烟的人养的是鸟。住在黄房子里的人抽登喜路。住在中间房子的人喝牛奶。
  5. 抽烟的人住在养猫的人隔壁。
  6. 养马的人住在抽登喜路香烟的人隔壁。抽蓝色大师的人喝的是啤酒。德国人抽了王子。
  7. 挪威人住在青瓦台旁边。
  8. 抽烟的人是喝水的人的邻居。
  9. 有人有一个鱼缸,里面有鱼。

程序:

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).

这是您必须解决此问题的一个原因。下面的程序片段删除了相当多的目标,但它仍然失败。光是可见部分就已经对失败负责了。你能从这个片段中找出原因吗?

(有关此方法的更多信息,请参阅这解释。)

<>之前:- op(950, fy, *)。* _。:初始化(邻居(_Rua))。邻居( _ /* <年代> Rua */): -*length(Rua, 5) * <年代> Rua = [casa (noruegues _ ,_,_,_)|_], * <年代>成员(casa(评论、单身、_、_、_),Rua) , * <年代>成员(casa (sueco _, _, _ cachorros), Rua) , * <年代>成员(casa (cha dinamarques _, _, _), Rua) ,esquerda (casa ( _ /* <年代>佛得角*/,_,_,_,_), _ /* <年代> casa(布兰卡 ,_,_,_,_) */Rua), * <年代>成员(casa(佛得角,_,咖啡馆,_,_),Rua) , * <年代>成员(casa(_、_、_、pallmall passaros), Rua) , * <年代>成员(casa(登喜路amarela _, _, _), Rua) , * <年代> Rua = _, _, casa(_, _,雷特 ,_,_),_,_], * <年代> ao_lado (casa(_、_、_、混纺、_),casa(_, _, _, _,偏见),Rua) , * <年代> ao_lado (casa(_, _, _, _,制作),casa(登喜路_,_,_,_),Rua) , * <年代>成员(casa (_, _, cerveja bluemaster, _), Rua) , * <年代>成员(casa(王子,alemao _, _ _), Rua) , * <年代> ao_lado (casa (noruegues _, _, _, _), casa (azul ,_,_,_,_), Rua) , * <年代> ao_lado (casa(_、_、_、混纺、_),casa(阿瓜_,_,_,_),Rua) , * <年代>成员(casa(_, _、_、_、炖鱼、),Rua) 。esquerda([A|As], _/*A*/, E):-*member(E, As)。esquerda([_|As], A, E):-*esquerda(A, A, E)

相关内容

  • 没有找到相关文章

最新更新