Я пытаюсь сделать программу, в которой находятся seat(Guests, Seating)
, если люди в списке. Гости могут быть перегруппированы в список «Гостиные», чтобы каждый из них был совместим с теми, которые с каждой стороны.Использование предиката Prolog select?
У меня есть факты для каждого человека:
topics(neil, [diving, football, computers, hockey]).
и т.д ...
У меня также есть общий предикат, который является правилом, которое проверяет, если два человека имеют общую тему.
common(Person1, Person2, Topic)
я должен использовать встроенный предикат выбора и мой пользователь, определенный общий предикат, но я не знаю, как.
Может ли кто-нибудь предоставить вам подходящее решение или объяснение?
уточнить: таким образом, что это работает в том, что 'выбрать/3' будет выбрать элемент из списка (начиная с первого), и если это путь в дереве решений терпит неудачу, при обратном отслеживании 'select' выберет следующий элемент из списка, и поиск решения продолжится оттуда. – 2013-03-20 15:05:52
@Boris, правильный !. 'select/3', как используется здесь (с первым и третьим аргументами, не являющимися статическими, и вторым аргументом, созданным экземпляром), возьмет один элемент из списка второго аргумента (объединив его по первому аргументу) и объединив третий аргумент с оставшимися элементы списка. При обратном отслеживании он будет тестироваться с любым другим элементом списка (второй аргумент 'select/3'). Конечно, вы также можете называть места со вторым списком, созданным для проверки, если список мест совместим с некоторыми списками гостей. – gusbro
Спасибо, очень информативно! Отличная работа, понимайте это сейчас :) – Ciphor