3) Представление в виде списка структур

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

% Имя Отд. Должность Оклад

[сл (брайен, 100, оператор, 20000),

сл (нэнси, 200, начальник, 71000),

сл (ральф, 100, менеджер, 71500)]

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

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

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

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

% - +

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

Остаток]).

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

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

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

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

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

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

|?—один_циэ_1 (сл (Имя, 100, Долж, Окл),

[сл (брайен, 100, оператор, 20000),

сл (нэнси, 200, начальник, 71000),

сл (ральф, 100, менеджер, 71500)]).

Имя = брайен

Долж = оператор

Окл = 20000;

Имя = ральф

Долж = менеджер

Окл = 77500;

нет

4) Представление в виде рекурсивной структуры

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

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

рс (брайен,100, оператор, 20000,

рс (нэнси, 200, начальник, 71000,

рс (ральф, 100, менеджер, 71500, end)))

Приведем далее вариант процедуры "один_циэ", которая модифицирована таким образом, чтобы стала возможной обработка рекурсивной структуры. Первым (выходным) аргументом получившейся процедуры "один_циэ_рс" является структура "сл/4".

% построить структуру "сл" из верхнего уровня рекурсивной структуры

% данных:

% - +

один_циэ_рс (сл (Имя, 0тд, Долж, 0кл), рс (Имя, 0тд, Долж, 0кл,

Остаток)).

% игнорировать верхний уровень рекурсивной структуры, вызвать

% процедуру "один_циэ_рс" для получения следующего целостного

% информационного элемента из переменной Остаток:

один_циэ_рс (сл (Имя, Отд, Долж, Окл), рс (—,—,—,—, Остаток)):—

один_циэ-рс (сл (Имя, 0тд, Долж, 0кл), Остаток).

Опять-таки, после определения процедуры "один_циэ_рс" можно написать запрос, при помощи которого отыскиваются все служащие отдела 100. Вторым аргументом процедуры "один_циэ_рс" является целиком вся база данных.

|? - один_циэ_рс (сл (Имя, 100, Долж, Окл),

рс (брайен,100, оператор, 20000,

рс (нэнси, 200, начальник, 71000,

рс (ральф, 100, менеджер, 71500, end))).

Имя = брайен

Долж = оператор

Окл= 20000;

Имя = ральф

Долж = менеджер

Окл = 71500;

нет

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие