爱因斯坦之谜使用Prolog

use*_*775 2 prolog program-slicing zebra-puzzle

我正试图用Prolog解决爱因斯坦之谜.当我试图通过房屋(Hs)运行时,它显示没有.任务是

  1. 英国人住在红房子里.
  2. 瑞典人将狗作为宠物.
  3. 丹麦人喝茶.
  4. 温室位于白宫的左侧.
  5. 温室的主人喝咖啡.
  6. 吸烟Pall Mall的老板饲养鸟类.
  7. 黄屋的主人吸烟了登喜路.
  8. 住在中心的老板喝牛奶.
  9. 挪威人居住在第一所房子里.
  10. 抽吸混合物的主人生活在养猫的旁边.
  11. 保持马的主人住在吸烟者的旁边.
  12. 吸烟的主人喝啤酒.
  13. 德国人抽烟王子.
  14. 挪威人住在蓝屋旁边.
  15. 抽吸混合物的主人生活在喝水的人旁边.
    houses(Hs) :-
       length(Hs, 5),                                            
       member(h(english,_,_,_,red), Hs),                         
       member(h(swede,dog,_,_,_), Hs),                         
       member(h(_,_,_,coffee,green), Hs),                        
       member(h(dane,_,_,tea,_), Hs),                       
       next(h(_,_,_,_,green), h(_,_,_,_,white), Hs),             
       member(h(_,bird,'Pall Mall',_,_), Hs),                       
       member(h(_,_,'Dunhill',_,yellow), Hs),                         
       Hs = [_,_,h(_,_,_,milk,_),_,_],                           
       Hs = [h(norwegian,_,_,_,_)|_],                            
       next(h(_,horse,_,_,_), h(_,_,'Dunhill',_,_), Hs),        
       next(h(_,_,blend,_,_), h(_,cat,_,_,_), Hs),             
       member(h(_,_,'Blue Master',beer,_), Hs),                        
       member(h(german,_,'Prince',_,_), Hs),                      
       next(h(norwegian,_,_,_,_), h(_,_,_,_,blue), Hs),  
       next(h(_,_,'Blend',_,_), h(_,_,_,water,_), Hs), 
       member(h(_,fish,_,_,_), Hs).

    next(A, B, Ls) :- append(_, [A,B|_], Ls).
    next(A, B, Ls) :- append(_, [B,A|_], Ls).

我不知道出了什么问题.谢谢

fal*_*lse 5

以下是您的计划的概括.我添加了一些额外*的删除几个目标并替换了一些术语_/*origterm*/.然而,由此产生的程序仍然失败.因此,错误必须在剩余的片段中.你没有对程序说什么(编辑:你后来添加了一些东西),所以我没有(编辑:想要)知道它是什么.但无论如何,错误必须在剩余的可见部分:

:- initialization(houses(_Sol)).
:- op(950, fy, *).
*_.

houses(Hs) :-
   length(Hs, 5),
   * member(h(english,_,_,_,red), Hs),                         %  2
   * member(h(swede,dog,_,_,_), Hs),
   * member(h(_,_,_,coffee,green), Hs),
   * member(h(dane,_,_,tea,_), Hs),
   * next(h(_,_,_,_,green), h(_,_,_,_,white), Hs),
   member(h(_,_/*bird*/,'Pall Mall',_,_), Hs),
   member(h(_,_,'Dunhill',_,_/*yellow*/), Hs),
   * Hs = [_,_,h(_,_,_,milk,_),_,_],
   * Hs = [h(norwegian,_,_,_,_)|_],
   * next(h(_,horse,_,_,_), h(_,_,'Dunhill',_,_), Hs),
   next(h(_,_,blend,_,_), _/*h(_,cat,_,_,_)*/, Hs),
   member(h(_,_,'Blue Master',_/*beer*/,_), Hs),
   member(h(_/*german*/,_,'Prince',_,_), Hs),
   * next(h(norwegian,_,_,_,_), h(_,_,_,_,blue), Hs),
   next(h(_,_,'Blend',_,_), _/*h(_,_,_,water,_)*/, Hs),
   * member(h(_,fish,_,_,_), Hs).

next(A, B, Ls) :- append(_, [A,B|_], Ls).
next(A, B, Ls) :- append(_, [B,A|_], Ls).

剩下的不多了!在可见部分至少有一个错误!(严格来说,其他部分可能会有更多错误.我们根本就不知道).