爱因斯坦的谜语

时间:2010-12-13 11:23:55

标签: prolog zebra-puzzle

我是Prolog的新手,我正试图在Prolog中模拟像爱因斯坦之谜(也称为斑马谜语)(但有10个房子和30个提示)的谜语,我正在使用这个模型示例作为起点:

http://www.baptiste-wicht.com/2010/09/solve-einsteins-riddle-using-prolog/

但是在我的谜语中,我必须能够说X是正确的Y.我并不是直接对,而是在列表中。所以Y可以在第1宫,而在第9宫则是。

我如何在Prolog中执行此操作?我正在考虑一个谓词,它说Y是通过将X和X之前的所有元素从该列表中取出而构建的列表的成员,但是我不知道如何做到或者做到这一点以便我能够适应它前面提到的例子。

1 个答案:

答案 0 :(得分:1)

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

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