我正在尝试在 Prolog 中解决以下问题,并且我认为我的编码是正确的,但是我的查询只是返回 false。关于改变什么的任何建议?问题如下:
“Bagel Alley 是当地的百吉饼店,在早上上下班途中总是热闹非凡,因为人们在上班路上停下来买咖啡和百吉饼。每天早上在现场新鲜制作,百吉饼非常受欢迎,而且事实上,这家店的咖啡也很棒,简直是锦上添花!在 Bagel Alley 工作的人都很开朗友好,而且能干,所以尽管顾客数量众多,但等待的时间从不漫长或不愉快。乔和他的四个同事今天早上过来看看大家都在说什么,惊喜地发现这家店名不虚传。确定每个同事的名字,什么样的百吉饼配上馅料,味道和大小每个点的咖啡(小、中或大)。”
布拉德拿到了他的百吉饼,不是小麦,上面什么都没有。沃尔特点了一杯咖啡。
得到中型咖啡的两个同事一个得到了榛子味,另一个得到了他的百吉饼加花生酱。
得到洋葱百吉饼但没有加黄油的人还得到了法国香草咖啡,但不是小尺寸。
五个同事是乔,一个是大杯咖啡,一个是杏仁味咖啡,一个是小麦百吉饼,还有一个是在百吉饼上放鸡蛋和培根。
里克没有点蓝莓百吉饼,但他点了哥伦比亚咖啡。Amaretto 咖啡是和切达面包圈一起点的,但不是 Walt 点的。
奶油芝士没有配蓝莓百吉饼,但配了一大杯咖啡。芝麻百吉饼配黄油,但卡洛斯没有点。
我写的Prolog代码在这里:
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)”。应该给我解决问题的方法,但它返回错误。我错过了什么吗?提前谢谢了!