- •ПрОграммирование в лоГике
- •1. Факты и правила
- •2. Запросы (цели)
- •3. Переменные
- •4. Комментарии (слайд 7)
- •5. Основные разделы программ (слайд 8)
- •6. Стандартные домены
- •7. Сопоставление и унификация
- •8. Поиск с возвратом
- •8.1 Основные правила поиска с возвратом
- •8.2 Управление поиском решений
- •8.2.1 Предикат fail
- •8.2.2 Отсечение (cut)
ПрОграммирование в лоГике
Пролог является результатом многолетней исследовательской работы. Первая официальная версия Пролога была разработана Аланом Кольмероэ в Марсельском университете во Франции в 1972 году как инструмент для ПРОграммирования ЛОГики. Первоначально Пролог разрабатывался как язык для решения задач искусственного интеллекта, он и сейчас очень хорошо подходит для создания экспертных систем и программирования других задач этой области. Но нынешний Visual Prolog – это язык, способный решать практически любые задачи современного программирования.
В Прологе решение задачи получается логическим выводом из ранее известных положений. Программа на Прологе представляет собой набор фактов и правил, обеспечивающих получение заключений на основе этих фактов. Поэтому Пролог известен как декларативный язык.
Пролог включает механизм вывода, который основан на сопоставлении образцов. С помощью подбора ответов на запросы он извлекает хранящуюся (известную) информацию. Пролог пытается проверить истинность гипотезы (другими словами – ответить на вопрос), запрашивая для этого информацию, о которой уже известно, что она истинна. Прологовское знание о мире – это ограниченный набор фактов и правил, заданных в программе.
Одной из важнейших особенностей Пролога является тот факт, что в дополнение к логическому поиску ответов на поставленные вопросы он может иметь дело с альтернативами и находить все возможные решения. Вместо обычной работы от начала программы до ее конца Пролог может возвращаться назад и просматривать более одного «пути» при решении всех составляющих задачу частей.
Пример 1. (слайд 1)
«В одном небольшом кафе в смене работали пять человек: администратор, повар, кондитер, кассир и дворник. Одновременно на работу выходили Голубева, Иванова, Васин, Смирнов и Азаров. При этом было известно, что:
повар – холостяк (A);
кассир и администратор жили в одной комнате, когда учились в колледже (B);
Азаров и Иванова встречаются только на работе (C);
жена Васина заболела, когда муж сказал ей, что администратор отказал ему в отгуле на субботний вечер (D);
Смирнов собирается быть свидетелем на свадьбе у кассира и кондитера (E).
Кто на какой должности в этом кафе?»
Этот пример в дальнейшей нашей работе будет неоднократно использоваться. В данный момент мы обратим внимание на способ записи предложений на естественном языке в стиле синтаксиса логики предикатов. Курсивом выделим несущественные слова. (слайд 2)
Таблица 1.
Предложения на естественном языке |
Синтаксис логики предикатов |
В одном небольшом кафе в смене работали пять человек: администратор, повар, кондитер, кассир и дворник. |
профессия(администратор). профессия(повар). профессия(кондитер). профессия(кассир). профессия(дворник). |
Одновременно на работу выходили Голубева, Иванова, Васин, Смирнов и Азаров |
сотрудник(голубева, жен). сотрудник(иванова, жен). сотрудник(васин, муж). сотрудник(смирнов, муж). сотрудник(азаров, муж). |
