Предположим, что в ответ на первое найденное Прологом соответствие (Х=цветы) мы предлагаем системе продолжить поиск (введя
Что произойдет, если, имея те же факты, что и ранее, мы зададим вопрос:
?- нравится(Х,мэри).
В этом вопросе спрашивается:
?- нравится(Х, мэри).
Х=джон;
Х=поль;
нет
1.4. Конъюнкции
Предположим, что мы хотим получать ответы на вопросы о более сложных отношениях, таких как:
нравится(мэри,пища).
нравится(мэри,вино).
нравится(джон,вино).
нравится(джон,мэри).
Мы хотим узнать, нравятся ли Джон и Мэри друг другу. Для этого мы спрашиваем:
?- нравится(джон,мэри),нравится(мэри,джон).
Запятая читается как «и» и используется для разделения произвольного числа различных целей, которые должны быть согласованы с базой данных для того, чтобы ответить положительно на вопрос. Если задана последовательность целей (разделенных запятыми), то Пролог пытается согласовать каждую цель по очереди, просматривая базу данных в поисках сопоставимых фактов. Чтобы согласовать с базой данных последовательность целей, необходимо согласовать все отдельные цели. Что должен напечатать Пролог в ответ на приведенный выше вопрос? Ответ будет нет. Действительно, так как имеет место факт, что Джону нравится Мэри, то первая цель согласуется с базой данных. Однако вторая цель не согласуется с базой данных, так как в ней отсутствует факт нравится(мэри,джон). Учитывая, что мы хотели знать, нравятся ли они
Сочетая возможности конъюнкции и использования переменных, можно строить достаточно содержательные вопросы. Теперь, когда мы знаем, что нельзя выяснить, нравятся ли Джон и Мэри друг другу, мы спрашиваем:
• Существует ли такой объект X, который нравится Мэри.
• Нравится ли Джону найденное значение X.
В Прологе два указанных целевых утверждения следует объединить, используя конъюнкцию, как показано ниже:
?- нравится(мэри,Х), нравится(джон,X).
Пролог отвечает на вопрос, пытаясь подобрать соответствие для первой цели. Если в базе данных есть факт, соответствующий целевому высказыванию, то Пролог отметит найденное место и попытается согласовать вторую цель. Если и она достигнута, то Пролог также отмечает в базе данных соответствующее ей место, и таким образом находится решение, удовлетворяющее обеим целям.