我正在尝试使用Prolog解决爱因斯坦之谜。当我尝试由房屋运行时,它显示“否”。任务是
房屋:
长度(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/