На Горох
Информатика, 10 класс

§ 41. Запросы в базе знаний на Прологе

"Информатика (базовый уровень)", Гейн А.Г., Юнерман Н.А.

Объяснение темы В оглавлении: § 41. Запросы в базе знаний на Прологе

Кратко о теме

Запрос в Прологе — это обращение к базе знаний, с помощью которого проверяют утверждение или находят значения переменных. Пролог сопоставляет запрос с фактами и правилами, перебирает подходящие варианты и сообщает результат. Запятая требует одновременного выполнения целей, а точка с запятой задаёт альтернативу или позволяет получить следующее решение. Понимание этих операций помогает составлять логические программы и находить ответы без пошагового описания алгоритма.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Запрос в Прологе — обращение к базе знаний, чтобы проверить утверждение или найти значения переменных, при которых оно истинно. Например, запрос любит(анна, чтение) проверяет конкретный факт. Он нужен для общения с логической программой и получения результата.

Цель — отдельное условие запроса, записанное именем отношения и его аргументами. В записи родитель(X, пётр) вся конструкция является одной целью. Выделение целей помогает понять, какие именно условия должен доказать Пролог.

Сопоставление — подбор значений переменных, при котором цель совпадает с фактом или правилом базы знаний. Если в факте родитель(мария, пётр) переменная X сопоставляется с мария. Благодаря сопоставлению один общий запрос работает с разными объектами.

Откат — возврат Пролога к предыдущему выбору, чтобы найти другое решение после неудачи текущего пути. Программа как бы отменяет последний неподходящий вариант и продолжает перебор. Это позволяет автоматически проверять несколько фактов и цепочек правил.

Как это устроено

Для простого запроса с конкретными аргументами Пролог сравнивает цель с фактами базы знаний. Если находится полностью совпадающий факт, запрос считается истинным и система сообщает yes; при отсутствии совпадения получается no. Такой поиск возможен потому, что аргументы уже заданы и подбирать неизвестные значения не требуется.

Запрос с переменной превращается в поиск, поскольку неизвестный аргумент можно связать с разными объектами из фактов. Пролог перебирает подходящие записи, выполняет сопоставление и выводит найденное значение переменной. Если решений несколько, после команды продолжения он возвращается к предыдущему выбору и показывает следующий вариант.

Несколько целей, соединённых запятой, образуют последовательность условий. Пролог сначала пытается доказать первую цель, затем использует полученные значения переменных при проверке второй и так далее. Один неудачный шаг делает весь составной запрос ложным, потому что логическая запятая означает «и», а не просто переход к следующей проверке.

Точка с запятой задаёт альтернативные пути доказательства и соответствует логическому «или». Достаточно, чтобы сработала левая или правая ветвь, тогда как при запятой необходимы обе соединённые цели. Поэтому запрос любит(анна, чтение); любит(анна, музыка) успешен, если истинно хотя бы одно из двух утверждений.

Порядок целей влияет на работу поиска, потому что каждая следующая цель использует результаты предыдущих. Если сначала поставить ограничивающее условие, Пролог получит меньше кандидатов и быстрее проверит остальные; неудачный порядок может создать много лишних переборов. Порядок фактов обычно определяет последовательность выдачи решений: сначала проверяются записи, расположенные раньше.

Виды запросов в Прологе и результаты их выполнения

Вид запросаФорма записиЧто проверяется или находитсяПример результата
Запрос с конкретными аргументамилюбит(анна, чтение)Наличие точного фактаyes или no
Запрос с одной переменнойродитель(X, пётр)Значения одного неизвестного аргументаX = мария; X = сергей
Запрос с несколькими переменнымиродитель(X, Y)Подходящие пары значенийX = мария, Y = пётр
Составной запрос с запятойродитель(X, Y), родитель(Y, иван)Одновременное выполнение всех целейX = сергей
Запрос с альтернативами через точку с запятойлюбит(анна, чтение); любит(анна, музыка)Истинность хотя бы одной ветвиyes, если выполнена одна цель

Сначала определите, есть ли в записи переменные и сколько целей соединено знаками. Затем сравните форму запроса с третьим столбцом: он показывает, что именно будет искать Пролог. В последнем столбце приведён типичный результат, но конкретные значения зависят от фактов и правил базы знаний.

Разбор задач

Проверка конкретного факта

Условие: в базе есть факт любит(анна, чтение). Нужно определить, истинно ли утверждение любит(анна, чтение).

  1. Запишем запрос с тем же именем отношения и теми же аргументами.
  2. Пролог сопоставит цель с фактами и найдёт точное совпадение.
  3. Так как совпадение найдено, система завершит проверку успешным ответом.

Ответ: yes. Если бы такого факта в базе не было и его нельзя было вывести правилом, ответ был бы no.

Поиск родителей Петра

Условие: база содержит факты родитель(мария, пётр) и родитель(сергей, пётр). Нужно выполнить запрос родитель(X, пётр) и найти всех родителей.

  1. Пролог сопоставит постоянный аргумент пётр, а переменную X оставит для подстановки.
  2. Первый подходящий факт даст X = мария; продолжение поиска заставит систему вернуться к выбору факта.
  3. При следующем сопоставлении появится X = сергей, после чего дальнейший поиск завершится отсутствием новых фактов.

Ответ: найдены мария и сергей. Один запрос с переменной может иметь несколько решений, поэтому их получают последовательно.

Поиск дедушек Ивана

Условие: отношение дедушка задано правилом дедушка(X, иван) :- родитель(X, Y), родитель(Y, иван). Известны факты родитель(сергей, пётр) и родитель(пётр, иван).

  1. Пролог начинает с первой цели родитель(X, Y) и сопоставляет её с фактами: получает X = сергей, Y = пётр.
  2. С этими значениями проверяется вторая цель родитель(Y, иван), то есть родитель(пётр, иван); она истинна.
  3. Обе цели выполнены, поэтому правило доказывает исходный запрос дедушка(X, иван). Если первая выбранная цепочка не подошла бы, произошёл бы откат и поиск другого Y или X.

Ответ: X = сергей. Дедушка найден не прямым фактом, а последовательным доказательством двух связанных целей.

Типичные ошибки

Строчная буква в имени переменной. Запись ученик(X) воспринимается как имя объекта, а не как неизвестное значение, потому что переменные обычно начинаются с прописной буквы или подчёркивания. Проверьте все аргументы запроса: X и _X могут быть переменными, а ученик — константой.

Ожидание одного ответа. Ученик часто считает первый найденный факт окончательным, хотя база может содержать несколько подходящих решений. Посмотрите, есть ли в запросе переменная, и запросите продолжение поиска после первого ответа.

Неверное понимание запятой. Её иногда принимают за разделитель независимых проверок, но она означает логическое «и». Проверьте запрос по шагам: каждая цель должна быть доказана при согласованных значениях переменных.

Смешение точки и точки с запятой. Точка завершает запрос, а точка с запятой соединяет альтернативы или позволяет перейти к следующему решению. Перед запуском определите, где заканчивается вся запись, а где начинается другая ветвь поиска.

Связь с другими темами

До запросов нужно знать строение фактов и правил Пролога, а также различать константы, переменные и отношения. Без этого трудно понять, какие части записи сравниваются буквально, а какие могут получать новые значения.

Тема опирается на логические операции «и» и «или» и на идею доказательства утверждений. Запятая соответствует совместному выполнению условий, а точка с запятой позволяет выбирать между альтернативными путями.

Запросы применяются при создании экспертных систем и логических программ. Они также используются в задачах поиска решений, где программа перебирает варианты и отбрасывает неподходящие с помощью отката.

Что запомнить

  • Запрос обращается к базе знаний и проверяет логическое утверждение.
  • Цель — отдельное условие внутри запроса.
  • Переменная в запросе позволяет искать неизвестные значения.
  • Запятая означает, что должны выполниться все соединённые цели.
  • Точка с запятой задаёт альтернативу или запрашивает следующий вариант.
  • Пролог перебирает решения с помощью сопоставления и отката.
  • После успешного ответа можно запросить другие решения.

Частые вопросы по теме

Чем запрос отличается от факта и правила?

Факт или правило записывают в базе знаний: они описывают известное утверждение или способ его доказательства. Запрос вводит пользователь, чтобы проверить утверждение или найти значения переменных.

Почему Пролог иногда выдаёт несколько ответов?

В базе знаний может быть несколько фактов или цепочек правил, подходящих к одному запросу. Пролог показывает решения по очереди, а после запроса продолжения выполняет откат и ищет следующий вариант.

Как запросить все значения переменной?

Нужно задать запрос с переменной, например родитель(X, пётр), и после каждого найденного ответа запрашивать продолжение поиска. Пролог будет перебирать решения, пока подходящие факты не закончатся.

Что означают запятая, точка и точка с запятой в запросе?

Запятая соединяет цели по смыслу «и»: истинными должны быть все условия. Точка завершает запись запроса, а точка с запятой означает альтернативу «или» и может использоваться для поиска следующего решения.

Почему изменение порядка целей может изменить результат выполнения запроса?

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

Спросить по теме параграфа

§ 41. Запросы в базе знаний на Прологе

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
10 класс
Учебник
"Информатика (базовый уровень)", Гейн А.Г., Юнерман Н.А.