首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我找不到关于Prolog的飞船难题的答案?

为什么我找不到关于Prolog的飞船难题的答案?
EN

Stack Overflow用户
提问于 2015-06-09 18:21:30
回答 1查看 771关注 0票数 3

我需要解决使用Prolog的船舶难题。以下是事实。

有5艘船。

  1. 希腊船六点出发,载着咖啡。
  2. 中间的那艘船有一个黑烟囱。
  3. 这艘英国船9点出发。
  4. 一艘装有蓝色烟囱的法国船在一艘运载咖啡的船的左边。
  5. 运载可可的船右边是一艘开往马赛的船。
  6. 这艘巴西船正驶往马尼拉。
  7. 运载大米的船旁边是一艘带绿色烟囱的船。
  8. 一艘开往热那亚的船五点出发。
  9. 西班牙船七点离开,然后驶往马赛的船的右边。
  10. 这艘装有红烟囱的船驶往汉堡。
  11. 七点离开的船旁边是一艘有白色烟囱的船。
  12. 边境线上的那艘船运载玉米。
  13. 那艘装有黑烟囱的船八点离开。
  14. 运载玉米的船停泊在运载大米的船旁边。
  15. 去汉堡的船六点出发。

哪艘船去塞德港?哪艘船载茶?

我在网上搜索答案,但找不到答案。因此,我指的是“斑马之谜”,因此我为这个问题安排了代码。这是我的Prolog代码问题。

代码语言:javascript
复制
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).

但是当我运行这个程序时,它会说‘假’。

那我该怎么解决呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-06-09 19:14:45

第二行中(在解决方案谓词之后)术语ship(...)的参数数是错误的。它是:

代码语言:javascript
复制
middleShip(ship(_,_,_,_,'Black',_),Shipes),

虽然它应该是:

代码语言:javascript
复制
middleShip(ship(_,_,_,'Black',_),Shipes),

我没有检查这是否有效,但这是导致您的解决方案失败的肯定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30739878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档