
- •1.1 Пример программы: родственные отношения.
- •1.2 Факты.
- •1.3 Вопросы.
- •1.4 Переменные.
- •1.5 Конъюнкция целей.
- •1.6 Правила.
- •1.7 Конъюнкция в правилах.
- •1.8 Переменные в теле правила.
- •1.9 Cтруктура пролог-программы.
- •2.1 Синтаксис пролога.
- •2.1.1 Константы.
- •2.1.2 Переменные.
- •2.1.3 Структуры.
- •2.1.4 Операторы - тоже функторы.
- •2.2 Арифметика.
- •2.3 Операции сравнения.
- •2.4 Сопоставление.
- •2.6 Примеры сопоставления структур.
- •3.1 Декларативная семантика Пролог-программ
- •3.2 Дизъюнкция целей
- •3.3 Процедурная семантика
- •3.3.1 Пример вычисления
- •3.3.2 Формальное описание процедуры вычисления целей.
- •3.4 Соотношение между процедурным и декларативным смыслом
- •4.1 Списки
- •4.1.1 Представление списка диаграммой.
- •4.1.2 Выделение головы и хвоста списка
- •4.1.3 Шаблоны списков.
- •4.1.4 Определения отношений через cons форму списка
- •4.1.4 Определения отношений через cons форму списка
- •4.2 Процедуры обработки списков
- •4.2.3 Применение append
- •4.2.5 Длина списка
- •4.3 Встроенные предикаты
- •4.3.1 Простые встроенные предикаты ввода-вывода.
- •4.3.2 Процедурный смысл встроенных предикатов ввода-вывода.
- •4.4 Ввод-вывод списков.
- •4.4.1 Ввод-вывод списка как терма.
- •4.4.2 Поэлементный ввод-вывод списка.
- •5.1 Отсечение.
- •5.1.1 Графическая иллюстрация действия cut.
- •5.1.2 Пример действия cut.
- •5.1.3 Применение cut при выборе альтернатив.
- •5.1.4 Формальное описание действия отсечения.
- •5.2 Применение отсечения.
- •5.2.2 Добавление элемента без дублирования.
- •5.2.3 Классификация.
- •5.2.4 Отсечение в численной рекурсии.
- •5.2.5 Замечания при использовании отсечения.
- •5.3 Сортировка списков.
- •5.3.1 Метод наивной сортировки.
- •5.3.2 Метод пузырька.
- •5.3.3 Mетод вставки.
- •5.3.4 Быстрая сортировка quick.
- •6.1 Отрицание как неудача. (not as failure)
- •6.2 Алгоритм поиска на Прологе. ( Логический подход к задаче о фермере, волке, козе и капусте.)
- •6.3 Чтение и запись информации с файлов.
- •6.3.1 Обработка входных потоков.
- •6.3.2 Обработка выходных потоков.
- •6.4 Обработка символов.
- •7.1 Встроенные предикаты
- •7.1.2 Проверка типа терма
- •7.2 Метапредикаты.(Встроенные предикаты обработки термов.)
- •7.2.1 Создание и декомпозиция термов.
- •7.2.2 Предикаты работы с базой данных
- •7.3 Поиск в лабиринте
- •7.4 Сравнительная характеристика языков программирования.
- •8.1. Операции (Операторы).
- •8.1.1 Приоритет оператора.
- •8.1.2. Тип оператора.
- •8.1.3 Объявление операций.
- •8.2. Поиск.
- •8.2. Поиск.
- •8.2.1 Поиск в Прологе.
- •8.2.2 Поиск в глубину.
- •8.2.3 Поиск в ширину.
- •8.2.4 Резюме Поиска.
- •9.1. Введение
- •9.2 Поиск с предпрочтением.
- •10.1. Постановка задачи
- •10.2. Пример грамматики
- •10.3. Пример разбора вручную.
- •10.4. Реализация грамматического разбора на Прологе.
- •Как должны выглядеть утверждения Пролога ?
- •Запоминание состояния в Прологе.
- •Аналогично для dcg проводится
- •11.1. Постановка задачи
- •Две емкости
- •11.2. Решение задачи
- •12.1. Постановка задачи
- •12.2. Решение
- •13.1. Введение
- •Метод "образовать и проверить"
- •13.2. Раскрашивание плоской карты
Пролог - |
это язык программирования, используемый для решения задач, в которых действуют объекты и отношения между этими объектами. |
Программа на прологе состоит из предложений, которые могут быть фактами, правилами или вопросами.
1.1 Пример программы: родственные отношения.
Рассмотрим дерево родственных отношений :
1.2 Факты.
Введем отношение родитель (parent) между объектами. parent (tom, bob). Это факт, определяющий , что Том является родителем Боба.
parent - имя отношения, tom, bob - его аргументы. Теперь можно записать программу, описывающую все дерево родственных отношений.
|
parent (pam, bob). parent (tom, bob). parent (tom, liz). parent (bob, ann). parent (bob, pat). parent (mary, ann). parent (pat, juli). |
|
Эта программа состоит из семи предложений (утверждений), clause(клоз). Каждый клоз записан фактом в виде отношения parent. При записи фактов надо соблюдать следующие правила:
Имена всех отношений и объектов с маленькой буквы.
Сначала записывается имя отношения, затем в круглых скобках через запятую объекты.
В конце ставится точка.
Еще пример факта:
|
like (bob, pam). |
Совокупность фактов в прологе называют базой даннах.
1.3 Вопросы.
К составленной базе данных можно задать вопросы. .
Вопрос в обычном прологе начинается с ?- Вопрос записывается также, как и факт. Например:
|
? - parent (bob,pat). yes |
|
Когда пролог получает вопрос, он пытается сопоставить его с базой данных. Такой факт находится, ответ: да (yes).
На вопрос
|
?-parent (bob,mary). no |
|
Ответ будет нет (no), так как такого факта в базе данных нет.
1.4 Переменные.
Можно задать вопрос и узнать кто родитель liz:
|
?- parent (X, liz). X= tom |
|
Здесь X - переменная. Ее величина неизвестна и она может принимать значения. В данном случае ее значением будет объект, для которого это утверждение истинно.
Вопрос :
|
?-parent (X, bob). X=tom X=pam |
|
|
Можно задать вопрос, кто является чьим родителем. Или найти такие X и Y, что X является родителем Y.
|
?-parent (X, Y). X= pam Y= bob Y= tom X= bob и т.д. |
|
1.5 Конъюнкция целей.
Можно задать более общий вопрос: Кто является родителем родителя juli. Так как нет отношения grandparent, то можно разбить на два вопроса:
кто родитель juli. Предположим - Y.
кто родитель Y. Предположим - X.
Тогда составной вопрос:
|
?-parent (Y, juli), parent (X, Y). X=bob Y=pat |
|
При поиске решения сначала находится Y , а затем по второму условию Х. Вопрос: Кто внуки тома?:
|
?-parent (tom, Y), parent (Y, X). Y=bob X=ann Y=bob X=pat |
|
И наконец, есть ли у ann и pat общий родитель?
|
?-parent (Y, ann), parent(Y, pat). Y=bob |
|