- •Модуль 1. Приемы программирования на пролоГе.
- •Тема 1. Основные понятия и определения логического программирования.
- •Лекция 1
- •1. Язык логического программирования пролог.
- •1.1 Основные понятия и определения
- •Лекция 2
- •1.2 Создание консольного приложения. Структура файла main.Pro.
- •1.3 Примеры построения правил
- •Лекция 3
- •1.5 Согласование целевых утверждений. Поиск с возвратом
- •1.5 Рекурсия в пролоГе.
- •Лекция 4
- •1.6 Средства управления пролог-программой. Отладка пролог-программ.
- •1.7 Стандартные предикаты обработки строк
- •1.8 Средства ввода и вывода. Работа с файлами.
- •Лекция 4
- •1.9 Изображение и обработка списков
- •Лекция 5
- •1.10 Динамические базы данных
- •2. Язык функционального программирования лисп Введение
- •2.1 Объекты данных Лиспа
- •2.2 Основные функции лисПа
- •2.2.1 Функции назначения
- •2.2.2 Числовые функции
- •2.2.3 Базовые функции лисПа
- •2.3 Основы работы в среде mulisp-85
- •2.4 Трассировка функций в muLisp.
- •2.4 Определение функций в лисПе
- •2.6 Рекурсивные определения и вычисления
- •Задания для лабораторных работ
Лекция 3
1.5 Согласование целевых утверждений. Поиск с возвратом
В Прологе не существует операции присваивания и для переменной не выделяется определенная область памяти. Связывание переменной с некоторым конкретным значением аргумента происходит в процессе унификации. Унификация возможна, когда сопоставляются два предиката с одинаковым именем одинаковой арности и одинаковым типом аргументов. В процессе сопоставления переменная приобретает значение аргумента постоянной или свободной переменной. Свободной называется переменная, которая на момент сопоставления не имеет конкретного сопоставления.
Если в процедурных языках повторные вычисления проводятся с помощью оператора цикла, то в логическом программировании основными средствами таких вычислений является поиск с возвратом (BackTracking.) и рекурсия. Рассмотрим на примере правила разные_жанры и базы знаний процесс согласования целевых утверждений (ЦУ) вместе с работой механизма поиска с возвратом.
Для наглядности введем вспомогательную структуру „состояние просмотра”, в которой пройденные записи в БЗ условно обозначаются символом * для первой подцели (внешней) в первой колонке, а для второй (внутренней) – во второй колонке. При этом при возвращении к предыдущей подцели отметки о просмотре в БЗ для текущей подцели аннулируются. Вычисления заканчиваются, когда все предикаты в БЗ будут пересмотрены для согласования самой внешней из подцелей.
В результате запроса
? разные_жанры (Х, Y)
ЦУ примет форму
? книга(Х, Y),книга (Х, Z) и Y<>Z, (1)
которое содержит две подцели и одно условие. Сопоставление первой подцели с БЗ (состояние а) дает Х=стаут, Y=детектив и приходим к новому ЦУ
? книга (стаут, Z) и детектив<>Z.
Обращение к БЗ (состояние b) дает Z=детектив, а проверка условия детектив<>детектив дает ложь (F). Другие сопоставления предиката книга (стаут, Z) с БЗ являются невозможными. В этом месте вступает в действие поиск с возвратом, мы возвращаемся к предыдущей подцели, ЦУ снова принимает вид (1) и просмотр БЗ начинается с записи, следующей после отметки.
БЗ Состояние просмотра
книга (стаут, детектив) * - * * * * * * * * * *
книга (по, поэзия) - - - - * * * * * * * *
книга (по, детектив) - - - - - - - * * - * *
книга (шевченко, поэзия) - - - - - - - - - - * *
а) b) c) d) e) f)
Теперь из второй записи имеем Х=по, Y=поэзия и новое ЦУ
? книга (по, Z), поэзия<>Z (2)
Согласование полученного ЦУ с БЗ, начиная с первого предиката, дает Z=поэзия, поэзия<>поэзия и, таким образом, дает ложь (F) (состояние c). Дальнейшее согласование (проход по неотмеченным предикатам из второй колонки) дает Z=детектив, поэзия<>детектив и, таким образом, находим первое решение (состояние d)
Х=по, Y=поэзия, Z= детектив.
Поиск с возвратом (проход по неотмеченным предикатам во второй колонке) других решений для (2) не дает и BackTracking снова возвращает нас к ЦУ (1), при этом просмотр начинается с третьей записи. Имеем
Х=по, Y=детектив и новое ЦУ
? книга (по, Z), детектив<>Z
которое будет истинным при Z=поэзия и находим второе решение (состояние e)
Х=по, Y=детектив, Z=поэзия.
Дальнейший поиск приводит к ситуациям, аналогичным состоянию b, и в результате БЗ для внешней подцели будет исчерпана – состояние f.