爱因斯坦之谜
Posted
技术标签:
【中文标题】爱因斯坦之谜【英文标题】:Einstein's riddle 【发布时间】:2011-05-24 14:53:14 【问题描述】:我是 Prolog 的新手,我正在尝试在 Prolog 中为(也称为斑马之谜)建模(但有 10 个房子和 30 个提示),我正在使用这个模型示例作为起点:
http://www.baptiste-wicht.com/2010/09/solve-einsteins-riddle-using-prolog/
但在我的谜语中,我必须能够说 X 是 Y 的对。而且我的意思不是直接对,而是在列表中的对。所以 Y 可以在 1 号屋,而 X 在 9 号屋。
如何在 Prolog 中做到这一点?我在考虑一个谓词,它说 Y 是通过将 X 和 X 之前的所有元素从该列表中取出而构造的列表的成员,但我不知道如何做到这一点或如何做到这一点,以便我可以适应它前面提到的例子。
【问题讨论】:
【参考方案1】:右(X,Y):- 右(X,Z),右(Z,Y)。
因此,您只需使用传递闭包来定义正确的谓词,然后定义直接相邻的元素。
【讨论】:
以上是关于爱因斯坦之谜的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Protégé 中用 OWL 解决爱因斯坦之谜时获得个人结果?