- •Лекция №6 Операции над списками. Способи подання бази знань
- •Способи подання бази знань
- •4.2.1. Представлення цілісних інформаційних елементів у вигляді фактів
- •4.2.2. Подання атрибутів у вигляді фактів
- •4.2.3. Представлення знань у вигляді списку структур
- •4.2.4. Подання у вигляді рекурсивних структур
- •Представление в виде двоичного дерева
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) ) )
).
Така подібність в поданні й обробці для третього й четвертого способу представлення бази даних не випадкова, тому що список є окремий і дуже важливий вид рекурсивної структури.