- •Часть 1
- •1. Введение
- •2. Теоретические основы логического программирования.
- •2.1 Основные определения логики предикатов первого порядка
- •2.2 Стандартные формы представления формул исчисления предикатов.
- •3. Синтаксис языка программирования Пролог.
- •3.1. Основные элементы языка Пролог.
- •3.2.2. Вопросы.
- •3.2. Представление клауз Хорна на языке Пролог. Факты. Правила. Вопросы.
- •3.2.1. Представление фактов в Пролог—программах.
- •3.2.3. Правила.
- •3.2.4. Подстановки и примеры утверждений.
- •3.2.5. Пример Прологпрограммы.
- •4. Семантика языка программирования Пролог.
- •4.1 Декларативная и процедурная семантика программ на языке Пролог.
- •4.2. Вычислительная модель логической программы.
- •4.2.1. Унификация термов.
- •4.2.2. Общая схема согласования целевых утверждений.
- •4.2.3 Механизм поиска с возвратом.
- •5. Рекурсивное программирование на языке Пролог.
- •5.1 Рекурсивные правила.
- •5.2 Схема поиска решений в рекурсивных программах.
- •5.3. Списки и их представление на Прологе.
- •Основные определения.
- •Унификация списков.
- •Предикат list.
- •Типовые процедуры обработки списков на языке Пролог.
- •Предикат length.
- •5.4.2. Предикат member.
- •Предикат first.
- •Предикат last.
- •Предикат next.
- •Предикат append.
- •Предикат add.
- •Предикаты revers1 и revers2.
- •Предикат delete.
- •5.4.10. Предикат number_list.
- •5.4.11. Предикат sumlist.
- •5.4.12. Предикат delrepeat.
- •5.5 Множества и их представление на языке Пролог. Простые программы обработки множеств.
- •Основные определения.
- •Предикат unionset.
- •Пересечение множеств.
- •Разность множеств.
- •Определение подмножества.
- •5.5.6. Декартово произведение множеств.
- •Прологпрограммы сортировки списков.
- •Метод прямого выбора.
- •Метод вставки.
- •5.6.3. Метод перестановок.
- •6. Стандартные предикаты языка Пролог.
- •Арифметические предикаты.
- •6.2. Предикаты сравнения арифметических выражений и символьных термов.
- •6.3. Предикаты определения типов термов.
- •6.4. Примеры программ с использованием арифметических предикатов.
- •6.5. Предикаты вводавывода термов и символов.
- •6.5.1. Ввод/вывод термов.
- •6.5.2. Ввод/вывод символов.
- •6.6. Стандартные предикаты управления логическим выводом.
- •6.7. Стандартные предикаты обработки списков.
- •6.8. Стандартные предикаты обработки строк.
- •7. Система программирования Arity Prolog 5.0.
- •Описание среды программирования Arity Prolog 5.0.
- •Методические указания по лабораторным работам.
- •7.2.1. Лабораторная работа № 1. Простейшая программа на языке Пролог.
- •7.2.2. Лабораторная работа № 2. Использование арифметических операций и унификации арифметических выражений.
- •7.2.3. Лабораторная работа 3.1. Создание базы данных “Cессия” и запросов к этой базе данных на языке Пролог с использованием стандартного предиката fail.
- •Приложение 2. Варианты заданий по лабораторной работе 4.
- •Приложение 3. Варианты заданий по лабораторной работе 5.
- •Список литературы.
3.2. Представление клауз Хорна на языке Пролог. Факты. Правила. Вопросы.
3.2.1. Представление фактов в Пролог—программах.
В логическом программировании существует три вида утверждений: факты, правила и вопросы. Самая простая программа на Прологе является множеством фактов. Факт — это предикатная структура, заканчивающаяся точкой, которая записывается следующим образом:
<имя предиката>(<терм1>,<терм2>,…,<термn>).
Факт представляет собой утверждение о том, что соблюдается некоторое отношение. Факты являются простейшим видом утверждений в логических программах и с их помощью можно выражать произвольные отношения между объектами.
Например, student(‘Иванов’).
Этот факт означает то, что Иванов является студентом.
Другой пример —
student(‘Иванов’,’МГГУ’).
Этот факт определяет отношение между термами, первым из которых является фамилия студента, а вторым место его учебы.
Одноместные предикаты определяют свойства объектов, а nместные предикаты определяют отношения между объектами. Совокупность наборов значений переменных, при которых предикат p(x1,x2,…,xn) имеет значение “истина” называется nместным отношением. Реляционной схемой (схемой отношения) предиката называется описание роли каждого аргумента предиката.
Например, parent(<имя родителя>,<имя ребенка>) схема предиката parent; person(<имя>,<пол>,<возраст>) схема предиката person.
Совокупность фактов в Прологпрограмме является аналогом реляционной базы данных, а вопросы к программе подобны запросам к базе данных.
Синтаксические правила записи фактов в программе следующие:
Имя предиката в утверждении-факте есть символьный атом.
После имени предиката записывается список аргументов в круглых скобках. Между именем предиката и открывающей скобкой ‘(‘ не должно быть пробела.
Возможны нуль—местные предикаты в фактах, т.е. предикаты, не имеющие аргументов.
В качестве аргументов в списке могут быть как переменные, так и константы.
В конце факта обязательна точка.
Переменные в фактах неявно связываются квантором всеобщности. Это означает, что факт p(T1,T2,…Tn). где Ti –переменные следует понимать так (T1) (T2)… (Tn) p(T1,T2,…Tn) —истина.
Факты, содержащие переменные, называются универсальными. Примерами универсальных фактов являются следующие утверждения:
plus(X,0,X). что означает, сумма любого числа Х с нулем равна X.
proiz(X,0,0). что означает, произведение любого числа Х с нулем равна 0.
horizontal(p(X1,Y),p(X2,Y)). что означает, отрезок прямой, начало и конец которого точки p(X1,Y) и p(X2,Y), соответственно, параллелен оси Х.
3.2.2. Вопросы.
Вопрос (целевое утверждение) это средство извлечения информации из логической программы. С помощью вопроса выясняется, истинно ли некоторое утверждение или нет. С точки зрения логики поиск ответа на вопрос состоит в определении того, является ли утверждение (вопрос) логическим следствием программы или нет.
Вопрос, включающий в себя конъюнкцию предикатов p1,p2,…,pn , называется конъюнктивным вопросом. Каждый предикат pi называется целью. Конъюнктивный вопрос это конъюнкция целей. Вопросы, состоящие из одной цели, называются простыми вопросами. Вопрос, не содержащий переменных, называется основным вопросом, а вопрос, включающий переменные, называется неосновным.
Переменные в вопросах неявно связаны квантором существования. Это означает, что вопрос ?p(X1,X2,…Xn). где X1,X2,…Xnпеременные, предполагает утвердительный ответ, если существует такой набор термов t1,t2,…tn, что подстановка {X1=t1,X2=t2,…Xn=tn} в предикат p дает результат “истина”. Если существует, хотя бы одна такая подстановка, то вопрос ?p(X1,X2,…Xn). выводим из логической программы, т.е. является логическим следствием программы.
Конъюнктивные вопросы могут содержать общие переменные. Переменные называются общими, если они входят в две или более цели конъюнктивного запроса.
