Загадка Эйнштейна

Я новичок в Прологе и пытаюсь смоделировать загадку, подобную загадке Эйнштейна, также известную как загадка Зебры (но с 10 домами и 30 подсказками) в Прологе, и я использую этот пример модели в качестве отправной точки:

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

Но в моей загадке я должен быть в состоянии сказать, что X - это право на Y. И я не имею в виду прямо право, но право в списке. Таким образом, Y может быть в доме 1, а X в доме 9.

Как я могу сделать это в Прологе? Я думал о предикате, который говорит, что Y является членом списка, построенного путем удаления X и всех элементов до X из этого списка, но я не уверен, как это сделать или сделать так, чтобы я мог вписать его в вышеупомянутый пример.

1 ответ

Справа (X,Y):- справа (X,Z), справа (Z,Y).

Следовательно, вы просто используете транзитивное замыкание, чтобы определить правильный предикат, а затем определить элементы, которые находятся непосредственно рядом друг с другом.

Другие вопросы по тегам