- •2.2.2.1 Вызов Турбо-Пролога и главное меню системы
- •2.2.3 Редактор Турбо-Пролога
- •2.2.3.1 Создание и редактирование программного файла
- •3 Лекция №2. Элементы и конструкции языка Турбо-Пролог
- •3.1 Основные вопросы
- •3.2 Текст лекции
- •3.2.1.1 Имена (идентификаторы)
- •3.2.2.1 Предикаты
- •3.2.2.2 Факты
- •3.2.2.3 Правила
- •3.2.2.4 Цели
- •4 Лекция №3. Объекты данных. Константы, переменные, структуры, списки.
- •4.1 Основные вопросы
- •4.2 Текст лекции
- •Стандартные типы доменов Турбо-Пролога
- •4.2.2.1 Константы
- •4.2.2.2 Переменные
- •4.2.2.3 Структуры
- •4.2.2.3 Списки
- •5 Лекция №4. Структура программы на Турбо-Прологе
- •5.1 Основные вопросы
- •5.2 Текст лекции
- •5.2.2 Структура программы на Турбо-Прологе – до 10 мин.
- •5.2.3.1 Раздел опций компилятора
- •5.2.3.2 Раздел констант
- •5.2.3.3 Раздел доменов
- •5.2.3.4 Раздел предикатов
- •5.2.3.5 Раздел утверждений
- •5.2.3.6 Раздел дбд
- •5.2.3.7 Раздел целей
- •6 Лекция №5. Унификация и поиск с возвратом: программа с фактами
- •6.1 Основные вопросы
- •6.2 Текст лекции
- •7 Лекция №6. Унификация и поиск с возвратом: программа с фактами и правилом
- •7.1 Ключевые (основные) вопросы (моменты)
- •7.2 Текст лекции
- •8 Лекция №7. Унификация и поиск с возвратом: программа с фактами и несколькими правилами
- •8.1 Основные вопросы
- •8.2 Текст лекции
- •9 Лекция №8. Вопросно-ответные системы
- •9.1 Основные вопросы
- •9.2 Текст лекции
- •10 Лекция №9. Средства отладки в Турбо-Прологе
- •10.1 Основные вопросы
- •10.2 Текст лекции
- •/*Программа 5 */
- •11 Лекция №10. Простейший ввод-вывод. Окна.
- •11.1 Основные вопросы
- •11.2 Текст лекции
- •11.2.1 Простейший ввод-вывод
- •11.2.2 Окна
- •12 Лекция №11. Управление поиском решений: предикаты отсечения и возврата
- •12.1 Основные вопросы
- •12.2 Текст лекции
- •/* Программа 5 */
- •Vse_reshenia:-roditel(X,y), write(X, "родитель", y), nl, fail.
- •Vita - родитель sasha
- •/* Программа 6 */
- •/* Программа 7 */
- •13 Лекция №12. Арифметика в Турбо-Прологе. Рекурсия.
- •13.1 Основные вопросы
- •13.2 Текст лекции
- •/* Программа 8 */
- •/* Программа 9 */
- •14 Лекция №13. Динамические базы данных
- •14.1 Основные вопросы
- •14.2 Текст лекции
- •/* Программа работы с дбд*/
- •15 Лекция №14. Работа со списками
- •15.1 Основные вопросы
- •15.2 Текст лекции
- •/* Программа 10*/
- •/* Программа 11 */
- •/* Программа 12 */
- •16 Лекция №15. Экспертные системы
- •16.1 Основные вопросы
- •16.2 Текст лекции
- •/* Программа эс*/
14 Лекция №13. Динамические базы данных
Время: 4 часа (180 мин.)
14.1 Основные вопросы
- обработка динамических баз данных.
14.2 Текст лекции
Утверждения с предикатами из раздела databases составляют динамическую базу данных (ДБД). Она получила название динамической, поскольку во время работы программы к ней можно добавлять новые утверждения и удалять из неё уже имеющиеся. ДБД располагается в оперативной памяти в специальной области, которая автоматически генерируется системой и не связана с областью хранения “статических” фактов.
Сами по себе предикаты и утверждения ДБД ничем не отличаются от обычных предикатов и фактов из разделов predicates и clauses. Однако от "статических" баз данных, описываемых в разделе clauses программы, динамические базы данных не могут содержать правил.
Для работы с ДБД в Турбо-Прологе используются специальные стандартные предикаты. Добавление факта в начало ДБД осуществляется с помощью предикатов assert или asserta. Добавление факта в конец ДБД осуществляется с помощью стандартного предиката assertz. Удаление факта из ДБД реализуется с помощью предиката retract.
Синтаксис всех перечисленных предикатов единый и может быть представлен следующим образом:
<станд. предикат> (<факт>)
Для модификации факта ДБД его необходимо вначале удалить, а затем добавить изменённый факт, т.е. нужно последовательно использовать предикаты retract и assert.
Обычно предикаты ДБД снабжают дополнительной буквой d перед именем, чтобы в тексте программы сразу отличать их от "статических" предикатов. Например:
domains
name, marka, color = string
database
dcar(name, marka, color)
В приведённом примере предикат dcar ("автомобиль") связывает информацию об имени владельца (name), марке (marka) и цвете (color) автомобиля. Предположим, что сведения, сообщаемые программе о владельцах автомобилей, определяются следующей реляционной таблицей:
Таблица 1
|
Отношение |
" Автомобиль" |
|
Элементы отношения |
атрибут 1 (имя владельца) |
атрибут 2 (марка) |
атрибут 3 (цвет) |
элемент 1 |
Иванов |
BMW |
Жёлтый |
элемент 2 |
Петров |
Волга |
Чёрный |
элемент 3 |
Сидоров |
Жигули |
Белый |
элемент 4 |
Полякова |
Audi |
красный |
Ставя в соответствие понятию "отношение" понятие "предикат", "атрибуту" - "терм", элементу отношения - "утверждение" легко убедиться, что такого рода таблицы, соответствующие реляционной модели данных, свободно поддерживаются средствами Турбо-Пролога. В нашем случае это будет выглядеть следующим образом:
car ("Иванов", "BMW", "жёлтый").
car ("Петров", "Волга", "чёрный").
car ("Сидоров", "Жигули", "белый").
сar("Полякова", "Audi", "красный").
Если эти данные, например, составляют исходную статическую базу раздела clauses, то её можно сразу перенести в ДБД. Фрагмент программы, осуществляющий это, имеет вид:
/* Начальная загрузка ДБД */
assert_database:-car (Name, Marka, Color),
assert (dcar (Name, Marka, Color)), fail.
assert_database:-!.
По окончании работы часто необходимо очистить ДБД. Для реализации этого можно использовать такой фрагмент программы:
/* Очистка ДБД */
clear_database:-retract(car(_,_,_)),fail.
clear_database:- !.
При очистке ДБД объекты утверждений car не имеют значения и поэтому на их местах стоят анонимные переменные. Предикат fail в обоих фрагментах программ обеспечивает выборку всех утверждений, до их исчерпания. Как только база исчерпана, выполняется предикат, обеспечивающий отсечение.
Для иллюстрации работы с ДБД ниже приводится текст программы, обеспечивающей следующие функции:
-занесение в ДБД новой информации о владельцах автомобилей;
- удаление информации о владельцах автомобилей;
- выдачу информации на экран;
- окончание работы с программой.
Эти функции предоставляются пользователю в виде меню, из которого он должен выбрать необходимую опцию. Меню и каждая из перечисленных функций реализуется соответствующим модулем программы: