- •ПрОграммирование в лоГике
- •1. Факты и правила
- •2. Запросы (цели)
- •3. Переменные
- •4. Комментарии (слайд 7)
- •5. Основные разделы программ (слайд 8)
- •6. Стандартные домены
- •7. Сопоставление и унификация
- •8.1 Основные правила поиска с возвратом
- •8. Поиск с возвратом
- •8.2 Управление поиском решений
- •8.2.1 Предикат fail
- •8.2.2 Отсечение (cut)
1. Факты и правила
При составлении программы на языке Пролог необходимо описать объекты (objects) и отношения (relations), а затем – правила (rules), при условии соблюдения которых эти отношения являются истинными. Программа на языке Пролог состоит из предложений (clauses), которые могут быть отнесены к одному из двух типов фраз: факты и правила.
Отношение в Прологе называется предикатом. Аргументы – это объекты, которые связываются этим отношением. Предикаты могут не иметь аргументов, но использование таких предикатов ограничено.
Предложение: «Одновременно на работу выходили Голубева, Иванова, Васин, Смирнов и Азаров» позволяет установить, что объектами являются Голубева, Иванова, Васин, Смирнов и Азаров. Каждый из которых обладает свойством принадлежности к определенному полу человека. Факты относительно этой принадлежности обеспечиваются двухместным предикатом сотрудник.
Факты
Отношение между объектами называется фактом. Факты – это отношения или свойства, о которых известно, что они имеют значение «истина». Факт самодостаточен. Прологу не требуется дополнительных сведений для подтверждения факта, и факт может быть использован как основа для логического вывода. Отношение состоит из имени отношения и объекта или объектов, заключенных в круглые скобки. Как и предложение, факт заканчивается точкой.
сотрудник(голубева, жен).
сотрудник(смирнов, муж).
Факты помимо отношений могут выражать и свойства:
профессия(администратор).
профессия(повар).
Правила
Правила позволяют вывести один факт из других фактов. Правило – это заключение, для которого известно, что оно истинно, если одно или несколько других найденных заключений или фактов являются истинными. Правила – это связанные отношения. Они позволяют Прологу логически выводить одну порцию информации из другой. Правило принимает значение «истина», если доказано, что заданный набор условий является истинным.
(слайд 3)
Символ «: -» имеет смысл «если», и служит для разделения двух частей правила: заголовка и тела.
Заголовок – это факт, который был бы истинным, если бы были бы истинными несколько условий.
Тело – это ряд условий, которые должны быть истинными, чтобы Пролог мог доказать, что заголовок правила истинен.
Правило может рассматриваться как процедура. С этой (процедурной) точки зрения правила могут предписывать выполнение каких-либо действий, отличных от доказательств фактов (вывести что-нибудь на экран или создать файл).
В качестве предикатов, составляющих тело правила, могут выступать:
предикаты, фигурирующие в базе фактов;
предикаты, совпадающие с заголовком других правил;
встроенные предикаты систем программирования Пролог.
Пример 2.
На основании высказывания B из примера 1 можно сформулировать правило, которое может выглядеть так:
Кассир и администратор являются людьми одного пола.
По этому правилу получается, что в том случае, когда в примере 1 будет устанавливаться профессия каждого из работников кафе, то необходимо описать правило, в котором осуществляется проверка совпадения полов.
На Прологе синтаксис у правил будет таким:
работа(Имя,Должность,Пол):-
сотрудник(Имя,Пол), профессия(Должность), … .
условие_пола(X1,Y1,Z1,X2,Y2,Z2):-
работа(X1,Y1,Z1), работа(X2,Y2,Z2),
Y1=кассир, Y2=администратор, Z1=Z2.
условие_пола(X1,Y1,Z1,X2,Y2,Z2):-
работа(X1,Y1,Z1), работа(X2,Y2,Z2),
Y1=администратор, Y2=кассир, Z1=Z2.
В примере 2 заголовками являются:
работа(Имя,Должность,Пол); условие_пола(X1,Y1,Z1,X2,Y2,Z2).
Телом первого правила является:
сотрудник(Имя,Пол), профессия(Должность), …
Здесь многоточие означает, что формулировка правила не приводится до конца, так как на этом этапе мы еще не учли всех фактов, изложенных в условии.
