我是 Prolog 的新手,我正在尝试在 Prolog 中模拟一个类似爱因斯坦谜语(也称为斑马谜语)的谜语(但有 10 个房屋和 30 个提示),我使用此模型示例作为起点:
http://www.baptiste-wicht.com/2010/09/solve-einsteins-riddle-using-prolog/ http://www.baptiste-wicht.com/2010/09/solve-einsteins-riddle-using-prolog/
但在我的谜语中,我必须能够说 X 是 Y 的右边。我的意思不是直接正确,而是在列表中的右边。所以 Y 可以在 1 号房子里,而 X 在 9 号房子里。
我怎样才能在 Prolog 中做到这一点?我正在考虑一个谓词,它说 Y 是通过将 X 和 X 之前的所有元素从该列表中取出而构造的列表的成员,但我不知道如何做到这一点或如何做到这一点,以便我可以将其放入前面提到的例子。
右(X,Y):- 右(X,Z),右(Z,Y)。
因此,您只需使用传递闭包来定义正确的谓词,然后定义彼此直接相邻的元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)