- •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. Раскрашивание плоской карты
2.1.3 Структуры.
Структура - это единый объект состоящий из совокупности других объектов, называемых компонентами. Компоненты в свою очередь могут быть также структурами.
|
Структура data: Название структуры стоит перед скобками,а компоненты внутри скобок, через запятую. Название структуры - ФУНКТОР. |
|
|
|
|
Структуры можно изображать в виде деревьев:
data
/ | \
27 april 1992
Структура с компонентами - структурами owns(bob, book(moby_dick, mell_will)).
Структуры можно использовать для представления геометрических фигур.
Объекты: точка Р1=point(1, 1) точка Р2=point(3, 3) отрезок seg(P1, P2) или seg(point(1, 1), point(3, 3)) треугольник triangle(point(2, 5), point(2, 8), point(5, 8)) |
|
|
|
|
|
Cтруктуру можно представить в виде дерева
|
Корень дерева - главный функтор. |
|
|
|
|
Если точка трехмерного пространства: point3(X, Y, Z) Можно записать : point(X, Y, Z) Получается: point(X, Y, Z) и point(X, Y)
Это разные термы, т.к. каждый функтор различается двумя параметрами:
именем, синтаксис которого совпадает с синтаксисом атомов
арностью - т.е. числом аргументов
Поэтому пишут:
point/2 point/3
Например,если написано: Отношение point/2 задано .... Это означает, что задано point(_,_) , а не point/2(_,_).
!!! Это типичная ошибка.
2.1.4 Операторы - тоже функторы.
Некоторые функторы удобнее записывать, как операторы. Например, можно записать
+(1, 2)
или
+
/ \
1 2
Удобнее записать 1+2 , т.е. в виде оператора. Причем надо понимать, что это не операция сложения, а операторная запись структуры. Такие операторы называются инфиксными.
Аналогично операторная запись
2*a+b*c
может быть представлена в виде структуры:
+( *(2, a), *(b, c))
Это и производит пролог при трансляции операторных выражений. Надо четко понимать, что операторы - это другая форма записи структуры.
2.2 Арифметика.
В прологе выполняются следующие операции:
+ - * / mod - остаток от целочисленного деления.
Если записать:
|
?-X = 2+1. X=2+1 |
|
|
|
|
т.к. это просто сопоставление переменной и структуры.
Чтобы арифметическое выражение рассчитывалось, необходимо использовать встроенный оператор is, который заставляет выполнять арифметические операции.
|
?-X is 2+1. X=3 ?-Y is 2*(5+6). Y=22 |
|
|
|
|
Левым аргументом оператора is является простой объект. Правый аргумент - арифметическое выражение, составленное с помощью арифметических операторов, чисел и переменных. К началу вычисления переменные должны быть уже конкретизированны какими-либо числами.
Если определить предикат f следующим образом:
f(X, Y, Z):-Z is X*X + Y*Y.
то получим:
|
?- f(2, 3, R). R=13 |
|
|
|
|
Если определить:
sum(X1, X2, X):-X is X1 + X2.
|
?-sum(2, 3, X). X=5 ?- sum(1, 1, X1), sum(X1, X1, X). X=4 |
