我正在尝试使用 Prolog 解决爱因斯坦之谜。当我尝试按房屋(Hs)运行时,它显示否。任务是
- 英国人住在红房子里。
- 瑞典人养狗作为宠物。
- 丹麦人喝茶。
- 绿房子就在白宫的左边。
- 温室的主人喝咖啡。
- 抽 Pall Mall 烟的老板养鸟。
- 黄色房子的主人抽登喜路香烟。
- 住在中间房子的主人喝牛奶。
- 挪威人住在第一栋房子里。
- 抽 Blends 烟的主人住在养猫的主人旁边。
- 养马的主人住在抽 Dunhill 烟的主人旁边。
- 抽 Bluemasters 烟的老板喝啤酒。
- 德国人抽 Prince 烟。
- 挪威人住在蓝房子旁边。
- 抽 Blends 的主人住在喝水的主人旁边。
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).
我不知道出了什么问题。谢谢
最佳答案
这是您的程序的概括。我添加了一些额外的 *
来删除多个目标,并用 _/*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).
剩下的不多了!可见部分至少有一个错误! (而且,严格来说,其他部分可能还有更多错误。我们根本不知道)。
关于prolog - 使用 Prolog 的爱因斯坦谜语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36816529/