Загадка Эйнштейна - PullRequest
       33

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

2 голосов
/ 13 декабря 2010

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

http://www.baptiste -wicht.com / 2010/09 / решить-Einsteins-загадка, используя-пролог /

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

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

1 Ответ

1 голос
/ 13 декабря 2010

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

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

...