我想在Prolog中解决以下问题,并且我认为我已经编写了正确的代码,但我的查询只是返回false。有什么建议要改变?问题是如下:Prolog中的逻辑谜题 - 使用列表
“贝果巷,当地的面包圈店,总是怒不可遏活动的位置时 早晨通勤的人停下来让他们的咖啡和面包圈在上班的 方式新鲜制作在现场每天早晨,百吉饼是非常受欢迎, 的事实店也有很大的咖啡就像锦上添花!谁在贝果巷工作的人 是开朗和友善,以及胜任,所以 尽管大量的客户,等待是永远长或不愉快。乔 和他的同事今天早上停的四看什么大家都 热烈讨论,并惊喜地发现,笑p达到了其声望。确定每个同事的名字,每个有序什么样以其 馅料面包圈,什么味道的咖啡尺寸(小,中,大)“。
布拉德得到了他的面包圈,这WASN”牛逼小麦,没事就可以了。沃尔特有序的小咖啡。
两个同事谁得到了中型咖啡是一个谁得到了榛子的味道,谁得到了他的百吉饼花生 黄油。
的一个
那个得到洋葱百吉饼,但没有用黄油的人也得到了法国香草咖啡,但不是小尺寸。
五个同事是乔,谁得到了较大的咖啡之一,谁得到了杏仁味咖啡的人,一个谁得到了小麦面包圈, ,谁在他的百吉饼了鸡蛋&培根的一个。
瑞克未订购的蓝莓面包圈,但他却获得哥伦比亚咖啡。 Amaretto咖啡与切达干酪百吉饼一起订购,但不是由沃尔特制作而是 。
奶油奶酪没有配备蓝莓面包圈,但它并配备了一大杯咖啡。芝麻百吉饼配上黄油,但是卡洛斯并没有下令。
我已经写了序言代码是在这里:
bagels(Sol):-
Sol = [[_,_,_,_,_],[_,_,_,_,_],[_,_,_,_,_],[_,_,_,_,_],[_,_,_,_,_]],
member([brad,X,plain,_,_], Sol), X \== wheat,
member([walt,_,_,small,_], Sol),
member([_,_,_,medium1,hazelnut], Sol),
member([_,_,peanut_butter,medium2,_], Sol),
member([_,onion,Y,Z,french_vanilla], Sol), Y \== butter, Z \== small,
member([joe,Ja,Jb,Jc,Jd], Sol),Ja\==wheat,Jb\==egg_bacon,Jc\==large,Jd==amaretto,
member([La,Lb,Lc,large,Ld], Sol), La\==joe,Lb\==wheat,Lc\==egg_bacon,Ld\==amaretto,
member([Aa,Ab,Ac,Ad,amaretto], Sol), Aa\==joe,Ab\==wheat,Ac\==egg_bacon,Ad\==large,
member([Wa,wheat,Wb,Wc,Wd], Sol), Wa\==joe,Wb\==egg_bacon,Wc\==large,Wd\==amaretto,
member([Ea,Eb,egg_bacon,Ec,Ed], Sol), Ea\==joe,Eb\==wheat,Ec\==large,Ed\==amaretto,
member([rick,R,_,_,columbian], Sol),R\==blueberry,
member([A,cheddar,_,_,amaretto], Sol), A\==walt,
member([_,B,cream_cheese,large,_], Sol), B\==blueberry,
member([C,sesame,butter,_,_], Sol), C \== carlos,
member([_,_,_,other,_], Sol),
member([_,_,_,_,other], Sol).
我相信,运行查询 “百吉饼(X)”。应该给我解决问题的办法,但它会返回错误。我错过了什么吗?提前谢谢了!
我明白了......所以你认为问题在于给定的问题过于具体,并且在措辞方面存在错误?我不确定从泛化到何处,因为它不能满足谜题的要求,除非我添加删除的线。 – guypowermister
@guypowermister:这种泛化的要点是:只要剩下的可见部分不是修改后,问题将持续。所以你必须改变剩下的可见部分。 – false
看看其余的代码:'amaretto'-connexion对我来说看起来很奇怪!你说:有'amaeto'的'joe',但是有一个人不是**'joe',那个人也应该有'amaretto' ... – false