- •Методические указания к выполнению лабораторных работ
- •Лабораторная работа «Установка и проверка работы Visual Prolog»
- •ПрОграммирование в лоГике
- •Описание окон Visual Prolog, перечень окон
- •Задание Создание проекта и настройка компилятора
- •Запуск и тестирование работы программы
- •Вопросы для самоконтроля
- •Лабораторная работа «Создание программы с использованием предложений, предикатов, доменов и целей. Создание составных целей»
- •Файлы используемые в проекте
- •Структура программы на Visual Prolog
- •Создание программы на языке Visual Prolog
- •1. В первую очередь необходимо определить факты.
- •2. Необходимо определить правила
- •3. После определения предложений необходимо сформулировать цель на языке Пролог
- •3. Далее в разделе предикатов необходимо описать пользовательские предикаты. Это можно сделать двумя способами
- •Задание Создание программы с использованием предложений, предикатов, доменов и целей
- •Организация запросов
- •Вопросы для самоконтроля
- •Лабораторная работа «Создание составных целей с конъюнкцией и дизъюнкцией»
- •Сложная цель с конъюнкцией и дизъюнкцией
- •Задание Внесение правил
- •Настроить проект как в лабораторной работе №1. * применить к каждой лабораторной работе
- •Организация запросов
- •Лабораторная работа «Использование отладчика приложения для составления целевого дерева»
- •Унификация и поиск с возвратом
- •Поиск с возвратом
- •Детальный поиск с возвратом
- •Задание
- •Создание программы
- •Использование отладчика приложения (Debugger)
- •Вопросы для самоконтроля
- •Лабораторная работа «Управление поиском решения»
- •Управление поиском решений
- •Прерывание поиска с возвратом (отсечение)
- •Использование предиката Fail
- •Предотвращение поиска с возвратом к предыдущей подцели в правиле
- •Использование предиката Not
- •Задание Создание программы поиска с предикатами !, not
- •Лабораторная работа «Организация пользовательского меню»
- •Детерминизм и отсечение
- •Использование правил для условного ветвления
- •Задание
- •Вопросы для самоконтроля
- •Лабораторная работа «Составные объекты»
- •Простые и составные объекты
- •Простые объекты данных
- •Составные объекты данных и функторы
- •Унификация составных объектов
- •Объявление составных доменов
- •Задание
- •Создание программы
- •Вопросы для самоконтроля
- •Лабораторная работа «Списки»
- •Задание
- •Вопросы для самоконтроля
- •Используемая литература
Унификация составных объектов
Составной объект может быть унифицирован с простой переменной или с составным объектом (возможно, содержащим переменные в качестве частей во внутренней структуре), который ему соответствует. Это означает, что составной объект можно использовать для того, чтобы передавать целый набор значений как единый объект, и затем применять унификацию для их разделения. Например:
date("April",14,1960)
сопоставляется с х и присваивает х значение date ("April", 14, i960). Также
date("April",14, I960)
сопоставляется с date(Mo, Da, Yr) и присваивает переменным Mo = "April", Da = 14 И Yr = I960.
Visual Prolog осуществляет унификацию в двух случаях. Во-первых, когда цель сопоставляется с заголовком предложений. Во-вторых, через знак равенства (=), который является инфиксным предикатом (предикатом, который расположен между своими аргументами, а не перед ними).
Фактически, Visual Prolog выполняет операцию присваивания для унификации объектов по разные стороны знака равенства. Это свойство полезно для нахождения значений аргументов составного объекта
Составные объекты могут рассматриваться в предложениях Пролога как единые объекты,
Можно использовать первый компонент составного объекта — функтор для распознавания различных объектов.
Важная особенность составных объектов состоит в том, что они позволяют легко передавать группы величин, как один аргумент. Рассмотрим в качестве примера ведение телефонной базы данных.
Объявление составных доменов
После компиляции программы, которая содержит следующие отношения:
domains
название,автор = symbol
год_издания,колич_стр = integer
персона=персона(имя_персоны,адрес_персоны)
имя_персоны=имя_персоны(имя,фамилия)
адрес_персоны=адрес_персоны(дом,улица,город)
выбранная_книга=выбранная_книга(состояние,название_книги)
дом=integer
состояние,название_книги,имя,фамилия,улица,город=symbol
predicates
книга(название, автор, год_издания,колич_стр)
предпочтение(имя,фамилия, название)
запись_в_карточке(персона,выбранная_книга)
clauses
книга(«Зарядка для хвоста», «Григории Остер»,1993,86).
книга(«Новая пародия», «Александра Хаут»,1993,72).
книга(«Верхний этаж», «Александр Власов»,1983,147).
книга(«Вини пух», «Аскандер Милн»,1992,201).
книга(«Сказка», «Джонни Радарри»,1992,206).
книга(«Нерв», «Владимир Высоцкий»,1990,206).
предпочтение(«Павел», «Павлов»,«Зарядка для хвоста»).
предпочтение(«Олег», «Сидоров», «Новая пародия»).
предпочтение(«Павел», «Павлов», «Сказка»).
предпочтение(«Олег», «Сидоров», «Новая пародия»).
предпочтение(«Ольга», «Тараканова»,«Зарядка для хвоста»).
запись_в_карточке(персона(имя_персоны(«Павел», «Павлов»,),адрес_персоны(16, «Жилина», «Тольятти»)), выбранная_книга(старая, «Новая пародия»)).
запись_в_карточке(персона(имя_персоны(«Олег», «Сидоров»),адрес_персоны(25, «Мира», «Самара»)), выбранная_книга(новая, «Верхний этаж»)).
запись_в_карточке(персона(имя_персоны(«Ольга», «Тараканова»),адрес_персоны(54, «Мира», «Самара»)), выбранная_книга(новая, «Верхний этаж»)).
goal
запись_в_карточке(персона(имя_персоны(Имя_персоны,Фамилия_персоны),адрес_персоны(_,_,A)), выбранная_книга(«Верхний этаж»,_)),A<>"Тольятти".
V
isual
Prolog
позволяет конструировать составные
объекты на нескольких уровнях (рис 9).
Рис. 9. Древовидная структура «запись_в_карточке»
