
- •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.8 Переменные в теле правила.
Определим отношение sister
Для любых X и Y X sister Y, if у X и Y есть общий родитель, и X female
Запишем правило на прологе
|
sister (X, Y):- parent(Z,X),
|
Здесь Z-общий родитель. Z-некоторый, любой. Можно спросить
?-sister(ann, pat). yes ?-sister(pat, pat). yes |
|
Ответ будет "yes". Так как мы не потребовали, чтобы X и Y были разные.
Добавим отношение different (X, Y), которое указывает ,что X и Y разные.
|
sister (X, Y):- parent(Z,X),
|
1.9 Cтруктура пролог-программы.
предложение |
- |
факт, |
правило, |
вопрос |
clause |
|
fact, |
rule, |
goal |
состав |
|
head |
head |
|
|
|
. |
.. |
? |
|
|
|
| |
| |
|
|
|
body |
body |
|
|
|
. |
. |
2.1 Синтаксис пролога.
Программа на прологе состоит из предложений . Предложения трех видов: факты, правила, вопросы. Все предложения строятся из термов.
|
Терм является синтаксической единицей. |
|
|
|
|
2.1.1 Константы.
Константы - это поименованные конкретные объекты или отношения. Атомы - аналогичны атомам или символам в лиспе. Атомы могут задаваться:
1) Цепочкой букв, цифр и символом подчеркивания '_', начиная со строчной буквы.
a sister x_23
2) специальными символами*: ====>
Числа Целые ( диапазон -32768 32767) Действительные ( диапазон 1Е-307 1Е+308)
2.1.2 Переменные.
Переменные служат для обозначения объектов, значения которых меняются в ходе выполнения программы.
Имена переменных могут начинаться: - или с прописной буквы - или с символа подчеркивания
X Y Result _result
Eсли значение переменной не интересует, то можно использовать анонимные переменные в виде символа подчеркивания '_'.
Например,
haschild(X):-parent(X, Y).
Здесь значение Y не интересует, можно записaть
haschald(X):-parent(X, _).
Значение анонимной переменной не выводится на печать. Если несколько анонимных переменных, то они все разные. Использование анонимных переменных позволяет не выдумывать имена переменных, когда не надо.
Пусть задано отношение parents для двух родителей.
parents(ann, tom, bob).
Тогда в правиле:
child(X):-parents(_, _, X).
Y Z
обе анонимные переменные разные.
! |
Внимание. Область действия переменных - одно предложение. |
|
|
|
|
Одноименные переменные в разных предложениях могут иметь разные значения.