2

Prolog で次の問題を解決しようとしています。正しくコーディングしたと思いますが、クエリは単に false を返します。何を変えるべきかについて何かアドバイスはありますか?問題は次のとおりです。

「地元のベーグル屋であるベーグル アレーは、通勤途中にコーヒーとベーグルを求めて立ち寄る人々で、朝の通勤時間には常に賑わいを見せていました。毎朝その場で作りたてのベーグルは非常に人気があり、店にはおいしいコーヒーもあるという事実は、ケーキのアイシングのようなものでした! ベーグルアレーで働く人々は明るくフレンドリーで有能であったため、大勢の顧客にもかかわらず、待ち時間が長くなったり不快になったりすることはありませんでした. ジョーと彼の同僚の 4 人が今朝立ち寄って、みんなが絶賛していたことを見て、店がその評判に応えていることを知ってうれしい驚きを感じました. 各同僚の名前、トッピングのベーグルの種類、味とサイズを決定しますそれぞれ注文したコーヒーの量(小、中、大)。」

  1. ブラッドはベーグルを手に入れましたが、それは小麦ではなく、何も入っていませんでした。ウォルトは小さなコーヒーを注文しました。

  2. ミディアム サイズのコーヒーを飲んだ 2 人の同僚は、ヘーゼルナッツ味のコーヒーを飲んだ同僚と、ピーナッツ バターを使ったベーグルを食べた人でした。

  3. バターではなくオニオンベーグルを手に入れた人は、フレンチバニラコーヒーも手に入れましたが、小さなサイズではありませんでした。

  4. 5 人の同僚は、大きなコーヒーを手に入れたジョー、アマレット風味のコーヒーを手に入れた人、小麦のベーグルを手に入れた人、ベーグルに卵とベーコンを手に入れた人でした。

  5. リックはブルーベリー ベーグルを注文しませんでしたが、コロンビア コーヒーを注文しました。アマレットコーヒーはチェダーベーグルと一緒に注文しましたが、ウォルトは注文しませんでした。

  6. クリームチーズにはブルーベリーベーグルは付いていませんでしたが、大きなコーヒーが付いていました。ごまベーグルにはバターが付いていましたが、カルロスは注文しませんでした。

私が書いたプロローグコードは次のとおりです。

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)」というクエリを実行すると思います。問題の解決策を教えてくれるはずですが、false を返します。何か不足していますか?よろしくお願いします!

4

2 に答える 2