Prolog を使用して Ship Puzzle の問題を解決する必要があります。ここに事実があります。
船は5隻。
- ギリシャの船は 6 時に出発し、コーヒーを運びます。
- 真ん中の船には黒い煙突があります。
- イギリスの船は9時に出発します。
- 青い煙突のフランス船は、コーヒーを運ぶ船の左側にあります。
- ココアを運ぶ船の右側にはマルセイユ行きの船があります。
- ブラジル船はマニラに向かっています。
- お米を運ぶ船の隣には、緑の煙突の船が。
- ジェノバ行きの船は5時に出発します。
- スペイン船は 7 時に出発し、マルセイユ行きの船の右側にあります。
- 赤い煙突のある船はハンブルグに行きます。
- 7時に出発する船の隣には、白い煙突のある船があります。
- 国境の船はとうもろこしを運んでいます。
- 黒い煙突のある船は8時に出発します。
- とうもろこしを運ぶ船は、米を運ぶ船の隣に停泊しています。
- ハンブルグ行きの船は 6 時に出発します。
ポートサイドに行く船は?お茶を運ぶ船は?
答えをインターネットで検索しましたが、何も見つかりませんでした。そこで、「The Zebra Puzzle」を参考にして、この問題のコードを整理しました。これが私のPrologコードの問題です。
exists(A,(A,_,_,_,_)).
exists(A,(_,A,_,_,_)).
exists(A,(_,_,A,_,_)).
exists(A,(_,_,_,A,_)).
exists(A,(_,_,_,_,A)).
rightOf(A,B,(B,A,_,_,_)).
rightOf(A,B,(_,B,A,_,_)).
rightOf(A,B,(_,_,B,A,_)).
rightOf(A,B,(_,_,_,B,A)).
middleShip(A,(_,_,A,_,_)).
lastShip(A,(_,_,_,_,A)).
nextTo(A,B,(B,A,_,_,_)).
nextTo(A,B,(_,B,A,_,_)).
nextTo(A,B,(_,_,B,A,_)).
nextTo(A,B,(_,_,_,B,A)).
nextTo(A,B,(A,B,_,_,_)).
nextTo(A,B,(_,A,B,_,_)).
nextTo(A,B,(_,_,A,B,_)).
nextTo(A,B,(_,_,_,A,B)).
solution(PortSaidShip, TeaCarrier) :-
Shipes = (ship(_,_,_,_,_),ship(_,_,_,_,_),ship(_,_,_,_,_),ship(_,_,_,_,_),ship(_,_,_,_,_)),
exists(ship('Greek',6,'Coffee',_,_),Shipes),
middleShip(ship(_,_,_,_,'Black',_),Shipes),
exists(ship('English',9,_,_,_),Shipes),
rightOf(ship(_,_,'Coffee',_,_),ship('French',_,_,'Blue',_),Shipes),
rightOf(ship(_,_,_,_,'Marseille'),ship(_,_,'Cocoa',_,_),Shipes),
exists(ship('Brazilian',_,_,_,'Manila'),Shipes),
nextTo(ship(_,_,_,'Green',_),ship(_,_,'Rice',_,_),Shipes),
exists(ship(_,5,_,_,'Genoa'),Shipes),
rightOf(ship('Spanish',7,_,_,_),ship(_,_,_,_,'Marseille'),Shipes),
exists(ship(_,_,_,'Red','Hamburg'),Shipes),
nextTo(ship(_,_,_,'White',_),ship(_,7,_,_,_),Shipes),
lastShip(ship(_,_,'Corn',_,_),Shipes),
exists(ship(_,8,_,'Black',_),Shipes),
nextTo(ship(_,_,'Corn',_,_),ship(_,_,'Rice',_,_),Shipes),
exists(ship(_,6,_,_,'Hamburg'),Shipes),
exists(ship(PortSaidShip,_,_,_,'Port Said'),Shipes),
exists(ship(TeaCarrier,_,'Tea',_,_),Shipes).
しかし、プログラムを実行すると、「false」と表示されます。
では、どうすればこれを解決できますか?
ありがとうございました