Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_SHI.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2.11 Mб
Скачать

5.3 Представлення атрибутів у вигляді фактів

Замість того, щоб записувати факти, що містять цілісні інформаційні елементи, можна використовувати як факти окремі атрибути (тобто властивості) цих інформаційних елементів. У разі потреби дані атрибути можна зібрати в єдине ціле за допомогою правила. Один з атрибутів повинний виступати в ролі ключа, що поєднує всі інші властивості. Атрибут Ім’я_службовця можна використовувати як ключ для БД work(). Перший екземпляр об'єкта РОБОТА можна представити в такий спосіб:

office(“Петренко”, 101). /* відділ */

post(“Петренко”, “оператор”). /* посада */

salary(“Петренко”, 250). /* оклад */

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

work2(Name, Office, Post, Salary):- office(Name, Office), post(Name, Post), salary (Name, Salary).

Це правило визначає неявну базу даних того ж виду, що і приведена раніше явна база даних work1(). Для цього правила можна скористатися попереднім запитом, що дасть ті ж результати, що і раніше.

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

Приведемо приклад правила, у якому пропонується видача премії в 100 грн. всім службовцям відділу 101. Це можна описати з використанням нового атрибута “премія”, предикат для якого можна визначити у вигляді правила:

prize(Name, 100):- office( Name, 101).

Для деяких службовців можна ввести додатковий атрибут “стаж_роботи” і новий набір фактів, його що описує:

work_time(“Петренко”, 5).

work_time(“Маслов”, 3).

Додавання нових атрибутів “премія” і “стаж_роботи” ніяк не вплине на приведене вище правило work2().

5.4 Представлення бази даних у вигляді списку структур

Базу даних можна також вважати потоком цілісних інформаційних елементів, що представляється мовою Пролог у вигляді списку структур. Кожен елемент списку – це цілісний інформаційний елемент:

[work(“Маслов”, 101, “оператор”, 200), work(“Денега”, 211, “керівник”, 450), work(“Петренко”, 101, “менеджер”, 300)]

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

Доступ до окремого інформаційного елемента такої БД буде здійснюватися з використанням спеціальної процедури, що містить два аргументи. Вхідним буде другий аргумент процедури. Він містить список цілісних інформаційних елементів. Результат виконання процедури повертається через її перший аргумент – по одному цілісному інформаційному елементі за одну відповідь на запит (тобто по одному екземплярі об’єкта, або по одному запису).

record(work(Name, Office, Post, Salary), [work(Name, Office, Post, Salary)|_]).

record(work(Name, Office, Post, Salary), [work(_,_,_,_) | Tail]):-record(work(Name, Office, Post, Salary), Tail).

Опис процедури record() аналогічно процедурі member(). З використанням процедури record() можна скласти запит про всіх службовців відділу 101. В другому аргументі цього запиту цілком міститься вся база даних.

record(work(Name, 101, Post, Salary), [work(„Маслов”, 101, „оператор”, 200), work(„Денега”, 211, „начальник”, 450), work(„Петренко”, 101, „менеджер”, 300)]).

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