Page 51 - 4800
P. 51

place(firm, street, house, group )
                         load_dbd
                         del(firm)
                         school(firm)
                         bank(firm)
                  clauses
                         adres(„ІФНТУНГ”, „вул.Карпатська”, 15, „Bуз”).
                         adres(„Прикарпатський університет”, „вул.Шевченко”, 57, „Вуз”).
                         adres(„Аваль”, „вул.Сахарова”, 32, „Банк”).
                         adres(„Надра”, „вул.Чорновола”, 23, „Банк”).
                         load_dbd:- adres(X, Av, N, G), assertz(address(X, Av, N, G)), fail.
                         load_dbd:- !.
                         del(Firm):- retract(address(Firm, _, _, _)).
                         place(X, St, N, G):- bound(X), address(X, St, N, G), !.
                         place(X, St, N, G):- free(X), address(X, St, N, G).
                         school(Firm):- рlасe(Firm, St, N, „Вуз”), write(St, “ ”, N), nl.
                         bank(Firm):- place(Firm, St, N, „Банк”), write(St, “ ”, N), nl.
                         Предикат  place()  зв’язує  місцерозташування  організації  в  місті  з  її  адресою.
                  Процедура р1асе() накладає обмеження „один-до-багатьох” при доступі до динамічної
                  БД address(), що забезпечує цілісність відношень при обробці запитів.
                         Предикати  school()  і  bank()  описують  дві  неявні  БД  для  забезпечення
                  користувача інтерфейсом доступу до динамічної БД.
                         Процедура load_dbd служить для занесення в динамічну БД address() інформації
                  із  статичної  БД  adres().  У  цій  процедурі  використовується  вже  знайомий  нам  метод
                  відкату  після  невдачі,  який  дозволяє  перебрати  всі  твердження  предиката  adres()  і
                  додати відповідні їм факти в динамічну БД.
                         Предикат del(X) має всього один аргумент і визначається правилом, яке видаляє
                  з динамічної БД запис про організацію, що має такуж назву, як і  аргумент Х предиката.
                         Завантажимо  програму  в  пам’ять  і  запустимо  її  на  виконання.  Якщо  ввести
                  запит:
                         Goal: adres(Firm, _, _, _)
                  то отримаємо список з чотирьох організацій за числом фактів, що входять до статичної
                  БД. Відповідь на запит:
                         Goal: place(Firm, _, _, _)
                  буде негативною, оскільки немає даних в динамічній БД, хоча в статичній вони задані,
                  а  предикат  place()  визначений  для  динамічної  БД.  Якщо  до  формування  запиту
                  завантажити  динамічну  базу  даних  із  статичної  Goal:  load_dbd  та  знову  сформувати
                  запит
                         Goal: place(Firm, _, _, Group)
                  то отримаємо список організацій.
                         При цьому, операцію завантаження динамічної БД слід виконувати тільки один
                  раз під час сеансу роботи з програмою. Це обумовлено тим, що повторне звернення до
                  предиката  load_dbd  викличе  поповнення  динамічної  бази  даних,  вже  існуючим  в  ній
                  набором фактів. Тобто відбудеться дублювання даних.

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

                         6.4         Процедура           роботи          з         динамічною            БД,
                  що навчається у користувача

                         Реалізація запиту „Яка адреса Приватбанку?” в програмі 6_2 показує відсутність
                  необхідних  даних  до  БД  і,  як  наслідок,  необхідності  їх  додавання.  Проте  додавання
                  нових даних вимагає виконання ряду операцій, описаних в вище. Для користувача, що





                                                              51
   46   47   48   49   50   51   52   53   54   55   56