Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / POSIBNIK / ПРОГР НА ПРОЛОГЕ.doc
Скачиваний:
51
Добавлен:
23.03.2015
Размер:
670 Кб
Скачать

4.2. Способи подання бази знань

Існує декілька способів подання бази знань засобами мови ПРОЛОГ. Розглянемо їх.

4.2.1. Представлення цілісних інформаційних елементів у вигляді фактів

Розглянемо базу даних про службовців деякої установи.

/* Ім'я Відділ Посада Оклад */

сл1 (іванов, 100, оператор, 200).

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

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

Щоб надрукувати всіх службовців відділу 200 можна у вікні Dialig поставити таку ціль “сл1 (Ім'я, 200, Посада, _ )”.

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

4.2.2. Подання атрибутів у вигляді фактів

Можна застосовувати як факти окремі атрибути (тобто властивості) інформаційних елементів.

відділ (іванов,100).

посада (іванов, оператор).

оклад (іванов,100).

відділ (петров,200).

посада (петров, керівник).

оклад (петров, 700).

відділ (сидоров, 200).

посада (сидоров, менеджер).

оклад (сидоров, 715).

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

сл2 (Ім'я, Відділ, Посада, Оклад):-

відділ (Ім'я, Відділ),

посада (Ім'я, Посада),

оклад (Ім'я, Оклад).

Запит може мати точно такий вигляд, як і для першого випадку:

сл2 (Ім'я, 200, Посада, _ ).

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

премія(Ім'я, 50):- % Видати премію в розмірі 50 грн.

відділ(Ім'я, 100). % службовцем відділу 100

стаж_роботи( іванов, 10).

стаж_роботи( петров, 15).

стаж_роботи( сидоров, 5).

Додавання цих атрибутів ніяк не вплине на вищенаведене правило для сл2.

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

Кожен елемент списку – це цілісний інформаційний елемент. Наприклад:

/* Ім'я Відділ Посада Оклад */

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

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

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

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

Наприклад, результат виконання процедури повертається через її перший аргумент – по одному цілісному інформаційному елементу за одне звернення:

один_ц_інф_елемент( сл(Ім'я, Відділ, Посада, Оклад),

[сл(Ім'я, Відділ, Посада, Оклад) | Залишок_списку]).

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

один_ц_інф_елемент( сл(Ім'я, Відділ, Посада, Оклад),

[сл(_, _, _, _) | Залишок_списку] ):-

один_ц_інф_елемент( сл(Ім'я, Відділ, Посада, Оклад), Залишок_списку)

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

один_ц_інф_елемент( сл(Ім'я, 200, Посада, Оклад),

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

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

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