2

我是 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 之前的所有元素从该列表中取出而构造的列表的成员,但我不知道如何做到这一点或如何做到这一点,以便我可以适应它前面提到的例子。

4

1 回答 1

1

右(X,Y):- 右(X,Z),右(Z,Y)。

因此,您只需使用传递闭包来定义正确的谓词,然后定义彼此直接相邻的元素。

于 2010-12-13T14:29:53.567 回答