我需要使用 Prolog 来解决 Ship Puzzle 问题。以下是事实。
有5艘船。
- 希腊船六点出发,载着咖啡。
- 中间的船有一个黑色的烟囱。
- 英国船九点出发。
- 带有蓝色烟囱的法国船在运送咖啡的船的左侧。
- 载可可的船的右边是一艘前往马赛的船。
- 这艘巴西船正驶向马尼拉。
- 载米的船旁边是一艘带有绿色烟囱的船。
- 一艘去热那亚的船五点出发。
- 西班牙船七点出发,在前往马赛的船的右侧。
- 带有红色烟囱的船前往汉堡。
- 七点出发的船旁边是一艘带白色烟囱的船。
- 边境的船载着玉米。
- 黑烟囱的船八点出发。
- 运送玉米的船停泊在运送大米的船旁边。
- 六点开往汉堡的船。
哪艘船去塞得港?哪艘船运茶?
我在互联网上搜索答案,但我找不到任何答案。所以我参考了“斑马拼图”,因此我为这个问题安排了代码。所以这是我的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).
但是当我运行程序时,它会说“假”。
那么我该如何解决呢?
谢谢你