爱因斯坦之谜

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 解决爱因斯坦之谜时获得个人结果?

斑马之谜的年龄比较

爱因斯坦谜语使用 Prolog

Prolog 中的爱因斯坦谜题

物理学家用相对论破解意识之谜引热议,网友直呼看不明白,作者:意识不完全来自大脑...

高数概念的思考