2

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

  1. 英国人住在红房子里。
  2. 瑞典人养狗作为宠物。
  3. 丹麦人喝茶。
  4. 绿房子就在白宫的左边。
  5. 温室的主人喝咖啡。
  6. 抽 Pall Mall 烟的店主养鸟。
  7. 黄色房子的主人抽登喜路。
  8. 住在中心屋的主人喝牛奶。
  9. 挪威人住在第一间房子里。
  10. 抽 Blends 的主人住在养猫的主人旁边。
  11. 养马的主人住在抽登喜路的主人旁边。
  12. 抽 Bluemasters 的老板喝啤酒。
  13. 德国人抽王子烟。
  14. 挪威人住在蓝屋旁边。
  15. 抽 Blends 的主人住在喝水的人旁边。
    房屋(Hs):-
       长度(Hs,5),                                            
       成员(h(英语,_,_,_,红色),Hs),                         
       成员(h(瑞典人,狗,_,_,_),Hs),                         
       成员(h(_,_,_,咖啡,绿色),Hs),                        
       成员(h(丹麦人,_,_,茶,_),Hs),                       
       下一个(h(_,_,_,_,green), h(_,_,_,_,white), Hs),             
       成员(h(_,鸟,'Pall Mall',_,_),Hs),                       
       成员(h(_,_,'登喜路',_,黄色),Hs),                         
       Hs = [_,_,h(_,_,_,牛奶,_),_,_],                           
       Hs = [h(挪威语,_,_,_,_)|_],                            
       下一个(h(_,马,_,_,_), h(_,_,'登喜路',_,​​_), Hs),        
       下一个(h(_,_,混合,_,_), h(_,cat,_,_,_), Hs),             
       成员(h(_,_,'蓝色大师',啤酒,_),Hs),                        
       成员(h(德语,_,'王子',_,_),Hs),                      
       下一个(h(挪威语,_,_,_,_), h(_,_,_,_,blue), Hs),  
       下一个(h(_,_,'混合',_,_), h(_,_,_,水,_), Hs),
       成员(h(_,鱼,_,_,_),Hs)。

    下一个(A,B,Ls):-追加(_,[A,B|_],Ls)。
    下一个(A,B,Ls):-追加(_,[B,A|_],Ls)。

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

4

1 回答 1

5

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

:- 初始化(房屋(_Sol))。
:- op(950, fy, *)。
*_。

房屋(Hs):-
   长度(Hs,5),
   *成员(h(英语,_,_,_,red), Hs) , % 2
   *成员(h(瑞典,狗,_,_,_),Hs),
   *成员(h(_,_,_,咖啡,绿色), Hs) ,
   *成员(h(dane,_,_,tea,_), Hs) ,
   *下一个(h(_,_,_,_,green), h(_,_,_,_,white), Hs) ,
   member(h(_,_ /*bird*/ ,'Pall Mall',_,_), Hs),
   成员(h(_,_,'Dunhill',_,_ /*黄色*/ ), Hs),
   * Hs = [_,_,h(_,_,_,牛奶,_),_,_] ,
   * Hs = [h(挪威语,_,_,_,_)|_] ,
   *下一个(h(_,horse,_,_,_), h(_,_,'Dunhill',_,_), Hs) ,
   下一个(h(_,_,混合,_,_), _ /*h(_,cat,_,_,_)*/ , Hs),
   member(h(_,_,'蓝大师',_ /*啤酒*/ ,_), Hs),
   成员(h(_ /*德语*/ ,_,'王子',_,_), Hs),
   *下一个(h(挪威语,_,_,_,_), h(_,_,_,_,blue), Hs) ,
   下一个(h(_,_,'混合',_,_), _ /*h(_,_,_,水,_)*/ , Hs),
   *成员(h(_,fish,_,_,_), Hs)。

下一个(A,B,Ls):-追加(_,[A,B|_],Ls)。
下一个(A,B,Ls):-追加(_,[B,A|_],Ls)。

所剩无几!在可见部分至少有一个错误!(而且,严格来说,其他部分可能还有更多错误。我们根本不知道)。

于 2016-04-24T10:06:03.477 回答