我想在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