Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция№6.docx
Скачиваний:
2
Добавлен:
20.08.2019
Размер:
68.48 Кб
Скачать

4.2.3. Представлення знань у вигляді списку структур

Базу данных можно также считать потоком целостных информационных элементов, что представляется на языке Пролог в виде списка структур. Каждый элемент списка — это целостный информационный элемент:

/* Имя Отдел Должность Оклад */

[сл(иванов, 100, оператор, 200),

сл(петров, 200, керівник, 700),

сл(сидоров, 100, менеджер, 715)]

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

В следующей процедуре входным является второй аргумент. Этот аргумент содержит список целостных информационных элементов. Результат выполнения процедуры возвращается через ее первый аргумент - по одному целостному информационному элементу за один ответ на запрос.

% выдается целостный информационный элемент, стоящий

% в начале списка.

один_циэ_1 (сл(Имя,Отдел,Должость,Оклад), [сл(Имя,Отдел,Должнось,Оклад)| Остаток]).

% игнорировать целостный информационный элемент, стоящий в начале

% списка и вызвать процедуру "один_циэ_1" для получения следующе-

% го информационного элемента

один_циэ_1 (ел (Имя,Отд,Долж,Окл), [ел (_,_,_,_)!Остаток]) :—

один__циэ_1 (ел (Имя, ОтдДолж.Окл), Остаток).

С учетом этого определения процедуры "один_циэ_1" можно составить запрос обо всех служащих отдела 100. Во втором аргументе этого запроса полностью содержится вся база даннях:

один_циэ_1( сл(Имя1 200, Должность, Оклад),

[сл(иванов, 100, оператор, 200),

сл(петров, 200, керівник, 700),

сл(сидоров, 100, менеджер, 715) ] ).

4.2.4. Подання у вигляді рекурсивних структур

Одним из вариантов представления базы данных в виде списка структур является представление в форме рекурсивной структуры. Структуру "сл/4", показанную выше, можно преобразовать в рекурсивную структуру ("рс") путем добавления дополнительного аргумента, содержащего оставшуюся часть базы данных.

% Имя Отд. Должн. Оклад Ост. часть базы данных

рс(иванов, 100, оператор, 200,

рс(петров, 200, керівник, 700,

рс(сидоров, 100, менеджер, 715, end)))

Тут end – це атом, що зображує кінець структури.

Дістати інформацію з такої структури можна аналогічно до попереднього випадку:

один_циэ_1( сл(Имя, Отдел, Должность, Оклад),

рс(Имя, Отдел, Должность, Оклад, Остаток)) .

Далі – проігнорувати елемент, розташований на початку структури і викликати цю ж процедуру із залишком як другий параметр для одержання чергового елемента (знову ж за допомогою першого правила цієї процедури):

один_циэ_1( сл(Имя, Отдел, Должность, Оклад),

рс(_, _, _, _, Остаток) ):-

один_циэ_1 (сл(Имя, Отдел, Должность, Оклад), Остаток).

Запит про всіх службовців відділу 100 буде мати такий вигляд:

один_циэ_1 ( сл(Имя, 100, Должность, Оклад),

рс(іванов, 100, оператор, 200,

рс(петров, 200, керівник, 700,

рс(сидоров, 100, менеджер, 715) ) )

).

Така подібність в поданні й обробці для третього й четвертого способу представлення бази даних не випадкова, тому що список є окремий і дуже важливий вид рекурсивної структури.