Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекц по Visual Prolog.doc
Скачиваний:
4
Добавлен:
02.05.2019
Размер:
937.47 Кб
Скачать

2.10. Предикати роботи з внутрішньою базою даних

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

Consult (“Ім'я_файлу”, Ім'я_Facts) -

(string, symbol) завантажує факти, що описані в іменованій секції.

Consult (“Ім'я_файлу”) - завантажує файли,

(string) що описані в неіменованій секції.

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

Факти можна вставляти в кінець групи фактів з вказаним предикатом за допомогою стандартного предикату Assertz і в початок групи фактів з вказаним предикатом за допомогою стандартного предикатом Asserta.

Assertz (факт)

Приклад: assertz ( vlast (“дерево”, ”зелене”))

Assertz (факт, ім’я_facts)

Приклад: assertz ( vlast (“дерево”, ”зелене”), flora)

Asserta (факт)

Приклад: asserta (klass(”список”,”структура”))

Asserta (факт, ім’я_facts)

Приклад: asserta (klass (”список”,”структура” ), dani)

Для сполучення з більш ранніми версіями у Пролозі існує предикат assert, який тотожний з assertz.

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

Facts

Kub(string, string, real)

Predicates

do

Goal

Consult (”F.dat”), do, save(“F.dat”).

Clauses

do: - write (“Ведіть матеріал, колір, довжину ребра ”), readln(Mat), readln(Color), readreal(Dl), assertz (kub (Mat, Color, Dl)).

Предикат Consult завантажує факти з файлу F.dat.

Файл F.dat має такі факти:

kub(“дерево”,”білий”,3.5) (1)

kub(“дерево”,”зелений”,3.4) (2)

Введені з клавіатури дані розміщуються у факті з функтором kub і заносяться в динамічну базу даних після факту (2).

Аналогічно можна додати факт в кінець динамічної бази даних, яка розміщена в секції Clauses. Розглянемо приклад програми.

Facts

Kub(string, string, real)

Predicates

do

Goal

do, save(“F.dat”).

Clauses

kub(“дерево”,”білий”,3.5).

kub(“дерево”,”зелений”,3.4).

do: - write (“Ведіть матеріал, колір, довжину ребра ”), readln(Mat), readln(Color), readreal(Dl), assertz (kub (Mat, Color, Dl)).

Після роботи програми у файлі F.dat зберігаються факти з секції Clauses в кінці котрих розташовано новий факт.

Предикати retract та retractall вилучають факти з внутрішньої бази даних.

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

Наприклад:

retract (Kub (“дерево”, _, _)) - вилучає перший знайдений факт про кубики, що зроблені з дерева.

retract (Kub (_, _, _)) - вилучає перший знайдений факт про кубики.

retract ( _ ) – вилучає перший факт з будь-яким функтором внутрішньої бази даних.

retract (факт, ім’я_facts) – вилучає перший факт із вказаним предикатом, що зустрічається, від початку внутрішньої іменованої бази даних.

retract (Kub (“дерево”, _, _), igrushki) - вилучає перший знайдений факт про кубики, що зроблені з дерева з бази даних igrushki.

retractall (факт)

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

Предикат retractall завжди істинний.

Наприклад,

retractall (Kub (“дерево”, _, _)) - вилучає всі знайдені факти про кубики, що зроблені з дерева.

Порівняйте: do:- retract(Kub (“дерево”, _, _)), fail.

Використання вільної змінної в предикаті не має сенсу. Тому в предикаті застосовують анонімну змінну.

retractall (Kub (_, _, _)) вилучає всі знайдені факти про кубики.

retractall ( _ ) вилучає всі факти з будь-яким функтором із внутрішньої бази даних.

retractall ( _, flora ) вилучає всі факти з будь-яким функтором з внутрішньої бази даних flora.

В результаті роботи програми динамічна база даних може змінюватися. Для зберігання бази даних призначено предикат save.

Якщо зберігати базу даних з тим же ім’ям, то нова база замінить стару.

save (“F.dat”) – зберегти базу даних з неіменованої секції.

save (“F.dat”, figura) – зберегти базу даних з іменованої секції.