Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1414-Лекции.doc
Скачиваний:
29
Добавлен:
25.12.2018
Размер:
419.84 Кб
Скачать

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 в обоих фрагментах программ обеспечивает выборку всех утверждений, до их исчерпания. Как только база исчерпана, выполняется предикат, обеспечивающий отсечение.

Для иллюстрации работы с ДБД ниже приводится текст программы, обеспечивающей следующие функции:

-занесение в ДБД новой информации о владельцах автомобилей;

- удаление информации о владельцах автомобилей;

- выдачу информации на экран;

- окончание работы с программой.

Эти функции предоставляются пользователю в виде меню, из которого он должен выбрать необходимую опцию. Меню и каждая из перечисленных функций реализуется соответствующим модулем программы:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]