我正在尝试使用Prolog解决爱因斯坦之谜。当我尝试由房屋运行时,它显示“否”。任务是

  • 英国人住在红房子里。
  • 瑞典人养狗作为宠物。
  • 丹麦人喝茶。
  • 绿房子在白房子的最左边。
  • 温室的主人喝咖啡。
  • 吸烟颇尔购物中心的主人饲养鸟类。
  • 黄房子的所有者抽烟登喜路。
  • 住在中心房屋的主人喝牛奶。
  • 挪威人住在第一所房子。
  • 抽着Blends的主人住在养猫的人旁边。
  • 养马的主人住在抽Dunhill的那位旁边。
  • 抽烟Bluemasters的主人喝啤酒。
  • 德国人抽王子。
  • 挪威人住在蓝色的房子旁边。
  • 吸食Blends的所有者与喝水的人住在一起。

  • 房屋:
    长度(Hs,5),
    成员(h(english,_,_,_,red),Hs),
    成员(h(瑞典人,狗,_,_,_),Hs),
    成员(h(_,_,_,咖啡,绿色),Hs),
    成员(h(dane,_,_,tea,_),Hs),
    next(h(_,_,_,_,green),h(_,_,_,_,white),Hs),
    成员(h(_,bird,'Pall Mall',_,_),Hs),
    成员(h(_,_,'Dunhill',_,黄色),Hs),
    Hs = [_,_,h(_,_,_,牛奶,_),_,_],
    Hs = [h(挪威文,_,_,_,_)| _],
    next(h(_,horse,_,_,_),h(_,_,'Dunhill',_,_),Hs),
    next(h(_,_,blend,_,_),h(_,cat,_,_,_),Hs),
    成员(h(_,_,'Blue Master',啤酒,_),Hs),
    成员(h(德语,_,'王子',_,_),Hs),
    next(h(挪威语,_,_,_,_),h(_,_,_,_,blue),Hs),
    next(h(_,_,'Blend',_,_),h(_,_,_,水,_),Hs),
    成员(h(_,fish,_,_,_),Hs)。

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

    我不知道怎么了。谢谢

    最佳答案

    这是您的程序的概括。我添加了一些额外的*来删除一些目标,并用_/*origterm*/替换了一些术语。但是,生成的程序仍然失败。因此,剩余片段中的错误必须为。您没有说任何有关程序的信息(编辑:稍后添加了一些内容),所以我不(想要编辑)想知道它的含义。但是无论如何,该错误必须存在于其余可见部分:

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

    房屋:
    长度(Hs,5),
    *成员(h(english,_,_,_,red),Hs),%2
    *成员(h(瑞典人,狗,_,_,_),Hs),
    *成员(h(_,_,_,咖啡,绿色),Hs),
    *成员(h(dane,_,_,tea,_),Hs),
    * next(h(_,_,_,_,green),h(_,_,_,_,white),Hs),
    成员(h(_,_ / * bird * /,'Pall Mall',_,_),Hs),
    成员(h(_,_,'Dunhill',_,_ / *黄色* /),Hs),
    * Hs = [_,_,h(_,_,_,牛奶,_),_,_],
    * Hs = [h(挪威语,_,_,_,_)| _],
    * next(h(_,horse,_,_,_),h(_,_,'Dunhill',_,_),Hs),
    next(h(_,_,blend,_,_),_ / * h(_,cat,_,_,_)* /,Hs),
    成员(h(_,_,'Blue Master',_ / *啤酒* /,_),Hs),
    成员(h(_ / * german * /,_,'Prince',_,_),Hs),
    * next(h(挪威语,_,_,_,_),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)。

    剩下的不多了!在可见部分至少有一个错误! (而且,严格来说,其他部分可能会有更多错误。我们只是不知道)。

    关于prolog - 爱因斯坦之谜使用Prolog,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36816529/

    10-10 06:28