
- •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. Раскрашивание плоской карты
3.3 Процедурная семантика
Процедурная семантика (процедурный смысл) пролог-программы определяет , как пролог-программа отвечает на вопросы. Ответитиь на вопрос -зто значит удовлетворить цели.
Поэтому процедурная семантика пролога -это процедура вычисления списка целей с учетом программы.
|
3.3.1 Пример вычисления
Рассмотрим программу и на ее примере - процедуру вычисления списка целей.
Программа 1.
1.большой(медведь). 2.большой(слон). 3.маленький (кот). 4.бурый(медведь). 5.черный(кот). 6.серый(слон). 7.темный(Z):-черный(Z). 7.1 8.темный(Z):-бурый(Z). 8.1 9.?-темный(X),большой(X). 9.1 9.2
Предложения пронумерованы для удобства
Таким образом для вычисления целей потребовалось 7 сопоставлений и один откат.
3.3.2 Формальное описание процедуры вычисления целей.
Пусть список целей
1.Если список целей пуст, вычисление дает успех, если нет, то выполнятся пункт 2.
2.Берется первая цель G1 из списка. Пролог выбирает в базе данных, просматривая сначала, первое предложение С, С: H :- B1, B2, ..., Bn. голова которого, сопоставляется с целью G1. Если такого предложения нет, то неудача. Если есть, то переменные конкретизируются и цель G1 заменяется на список целей
с конкретизированными значениями переменных.
3.Рассматривается рекурсивно через п.2 новый список целей.
Если С -факт, то новый список короче на одну цель.(n=0) Если вычисление нового списка оканчивается успешно, то и исходный список целей выполняется успешно. Если нет, то новый список целей отбрасывается, снимается конкретизация переменных и происходит возврат к просмотру программы, но начиная с предложения следующего за предложением С. Описанный процесс возврата называется бэктрекинг. (backtracking).
3.4 Соотношение между процедурным и декларативным смыслом
Создавая пролог программы всегда надо помнить о процедурном и декларативном смысле.
Декларативный смысл касается отношений , определенных в программе. Т.е. декларативный смысл определяет, что должно быть результатом программы.
С другой стороны, процедурный смысл определяет , как этот результат может быть достигнут, т.е., как реально отношения обрабатываются прологом.
4.1 Списки
Списки - такая же важная структура данных в Прологе, как и в Лиспе.
Список в Лиспе (a b c d) (1 2 (3)) записывается на Прологе [a,b,c,d] [1,2,[3]]
т.е. элементы записываются в квадратных скобках через запятую.
Элементами списка могут быть любые термы.
Пустой список - не nil , а [ ].
4.1.1 Представление списка диаграммой.
Список
в лиспе можно представить через функцию
cons
В
Прологе функции cons
соответствует функтор "."
(точка).
.(a,[])
соответствует
[a] ,
это другая форма записи
или
Ответственно
список [a,b,c]
представляется как структура .(а
,.(b,.(c,[])
или в виде дерева, или
диаграммой "виноградная лоза"
|
|
|
|
В лиспе : |
|
Для вложенных списков [a,b,[c,d]]
|
- на верхнем уровне три элемента
- на втором уровне два элемента. |