- •Методические указания к выполнению лабораторных работ
- •Лабораторная работа «Установка и проверка работы Visual Prolog»
- •ПрОграммирование в лоГике
- •Описание окон Visual Prolog, перечень окон
- •Задание Создание проекта и настройка компилятора
- •Запуск и тестирование работы программы
- •Вопросы для самоконтроля
- •Лабораторная работа «Создание программы с использованием предложений, предикатов, доменов и целей. Создание составных целей»
- •Файлы используемые в проекте
- •Структура программы на Visual Prolog
- •Создание программы на языке Visual Prolog
- •1. В первую очередь необходимо определить факты.
- •2. Необходимо определить правила
- •3. После определения предложений необходимо сформулировать цель на языке Пролог
- •3. Далее в разделе предикатов необходимо описать пользовательские предикаты. Это можно сделать двумя способами
- •Задание Создание программы с использованием предложений, предикатов, доменов и целей
- •Организация запросов
- •Вопросы для самоконтроля
- •Лабораторная работа «Создание составных целей с конъюнкцией и дизъюнкцией»
- •Сложная цель с конъюнкцией и дизъюнкцией
- •Задание Внесение правил
- •Настроить проект как в лабораторной работе №1. * применить к каждой лабораторной работе
- •Организация запросов
- •Лабораторная работа «Использование отладчика приложения для составления целевого дерева»
- •Унификация и поиск с возвратом
- •Поиск с возвратом
- •Детальный поиск с возвратом
- •Задание
- •Создание программы
- •Использование отладчика приложения (Debugger)
- •Вопросы для самоконтроля
- •Лабораторная работа «Управление поиском решения»
- •Управление поиском решений
- •Прерывание поиска с возвратом (отсечение)
- •Использование предиката Fail
- •Предотвращение поиска с возвратом к предыдущей подцели в правиле
- •Использование предиката Not
- •Задание Создание программы поиска с предикатами !, not
- •Лабораторная работа «Организация пользовательского меню»
- •Детерминизм и отсечение
- •Использование правил для условного ветвления
- •Задание
- •Вопросы для самоконтроля
- •Лабораторная работа «Составные объекты»
- •Простые и составные объекты
- •Простые объекты данных
- •Составные объекты данных и функторы
- •Унификация составных объектов
- •Объявление составных доменов
- •Задание
- •Создание программы
- •Вопросы для самоконтроля
- •Лабораторная работа «Списки»
- •Задание
- •Вопросы для самоконтроля
- •Используемая литература
Организация запросов
Сменить цель
goal % раздел целей
likes (X, tennis). % показать всех кто любит теннис
Запустить программу для выполнения запроса
Создать следующие запросы:
Показать, что любит Дис.
Что любит Долли?
Кто любит теннис и любит баскетбол?
likes (R, tennis), likes (R, reading). % две подцели (конъюнкция) разделены запятой.
Кто любит теннис или не любит читать?
likes (R, tennis); likes (R, reading). % две подцели (дизъюнкция) разделены точкой/запятой.
Добавить несколько пользовательских предикатов.
Организовать 2-3 составные цели с конъюнкцией.
Организовать 2-3 составные цели с дизъюнкцией.
Вопросы для самоконтроля
Дайте трактовку понятию в Visual Prolog:
цели;
подцели;
сложной цели;
сложной цели с конъюнкцией
сложной цели с дизъюнкцией.
Приведите примеры сложной цели с конъюнкцией.
Приведите примеры сложной цели с дизъюнкцией.
Лабораторная работа «Использование отладчика приложения для составления целевого дерева»
Тема: Использование отладчика приложения для составления целевого дерева.
Цель работы: изучить механизм поиска с возвратом в Visual Prolog, правила построения целевого дерева, алгоритма работы программы.
Унификация и поиск с возвратом
При организации цели часто используется сопоставление (:-) при этом необходимо учитывать следующие правила:
идентичные структуры сопоставляются друг с другом;
свободная переменная сопоставляется с константой или с ранее связанной переменной (и становится связанной с соответствующим значением);
две свободные переменные могут сопоставляться (и связываться) друг с другом. С момента связывания они трактуются как одна переменная: если одна из них принимает какое-либо значение, то вторая немедленно принимает, то же значение.
Процесс, используемый Visual Prolog во время попытки сопоставления вызова (из подцели) с конкретным предложением (в разделе программы clauses) называется унификацией. Унификация — это процесс сопоставления двух предикатов и присваивания свободным переменным значений для того, чтобы сделать предикаты идентичными.
Этот механизм необходим, чтобы Visual Prolog мог определить, какое предложение вызвать и каким переменным присвоить значения. Представлены важные моменты, связанные с сопоставлением (унификацией):
когда Пролог начинает попытки достичь цели, он начинает поиск с начала программы;
когда вызов завершается успехом, говорят, что вызов возвратился, и делается попытка доказать следующую подцель;
если переменная была связана в предложении, единственный способ сделать ее снова свободной — это откат (поиск с возвратом).
Поиск с возвратом
Поиск с возвратом — это механизм, который указывает Visual Prolog, как искать решения для программы. Этот процесс дает Прологу возможность перебрать все известные факты и правила для решения. Рассмотрены четыре основных принципа поиска с возвратом:
подцели должны проверяться по порядку, сверху вниз;
предикатные предложения проверяются в том порядке, в котором они появляются в программе, сверху вниз;
когда подцель сопоставляется с заголовком правила, тело правила должно после этого быть доказано (тело правила состоит из новых подцелей, которые должны быть доказаны);
цель доказана, когда соответствующие факты найдены для каждой листьевой вершины дерева целей.
При поиске решений часто возникают варианты пути поиска, и приходится выбирать один из путей, прорабатывать его и при не нахождении решения возвращаться для проработки следующей ветки. Этот метод называется поиск с возвратом, а точка ветвления называется точкой отката. Работа поиска с возвратом всегда подчиняется следующим правилам:
Согласование целевого утверждение всегда начинается с вершины программы.
При выполнении нового обращения поиск начинается с вершины программы.
При успешном соответствии обращения, обращение возвращается и может быть испытана новая подцель.
При неуспешном соответствии обращения, переменная освобождается и может быть испытана новая подцель.
