Page 53 - 4800
P. 53

вільної оперативної пам'яті. Для збільшення об’єму інформації, що зберігається, можна
                  організувати базу даних, яка зберігається не в оперативній пам’яті, а у файлах на диску.
                         Це  розширює  можливість  баз  даних,  оскільки  при  їх  розміщенні  у  файлах
                  єдиним обмеженням є розмір вільного дискового простору. Це означає, що бази даних
                  Прологу можуть досягати значних розмірів.
                         Предикат readterm забезпечує доступ до фактів в файлі та має наступний вигляд:
                         readterm(DomainName, TermRecord),
                  де DomainName – це ім’я області типів даних, TermRecord – це терм, який зв’язується з
                  заданим об’єктом, за умови узгодження його з описом домену.
                         Факти,  які  описують  предикати  бази  даних,  можуть  бути  оброблені  так,  ніби
                  вони  були  термами.  Це  можливо  завдяки  домену  dbasedom,  який  автоматично
                  декларується системою Пролог і утворює ОДНУ альтернативу для кожного предиката
                  бази даних. Він описує кожен предикат бази даних функтором і доменами аргументів
                  даного предиката. Наприклад, нехай в Пролог-програмі є такі описи бази даних:
                  database
                         реrson(name, age, sex)
                         address(firm, street, house, grоup)
                         У цьому випадку система Пролог автоматично створить відповідний цим описам
                  домен dbasedom:
                  domains
                         dbasedom = реrson(name, age, sex); address(firm, street, house, grоup),
                  який  може  бути  використаний,  як  і  будь-який  інший  оголошений  домен  Пролог-
                  програми.
                         Розглянемо простий приклад організації бази даних з використанням файлу на
                  диску.  За  основу  приймемо  спрощений  варіант  програми  6_2,  в  якому  база  даних
                  address() розміщується у файлі послідовного доступу „adres.dba”.
                         Даному  прикладу  відповідає  програма  6_3,  в  якій  інтерфейс  з  явною  БД
                  забезпечується з використанням предиката рlасе(), структура якого аналогічна програмі
                  6_2.  Проте  процедура,  його  визначення,  відрізняється  тим,  що  в  цих  правилах
                  передбачено звернення до фактів дискової БД.
                         /* Програма 6_3 */
                         /* запитальна система, що навчається, для БД „adres.dba” */
                  domains
                         firm, street, group = symbol
                         house = integer
                         file = file_bd
                  database
                         address(firm, street, house, group)
                  predicates
                         place(firm, street, house, group)
                         my_read(dbasedom)
                         my_append(dbasedom)
                         next_rec(file)
                  clauses
                         my_read(Record):- openread(file_bd, “adres.dba”), readdevice(file_bd),
                  next_rec(file_bd), readterm(dbasedom, Record).
                         my_append(Record):- openappend( file_bd, “adres.dba), writedevice(file_bd),
                  write(Record), nl, closefile(file_bd).
                         next_rec(_).
                         next_rec(File):- not(eof(File)), next_rec(File).
                         place(F, S, N, G):- bound(F), my_read(R), R=address(F, S, N, G),!.
                         place(F, S, N, G):- free(F), my_read(R), R=address(F, S, N, G).
                         place(F, S, N, G):- bound(F), free(S), free(N), readdevice(key board), write(„введіть
                  для ”, F), nl, write(„назву вулиці: ”), readln(S), write(„номер будинку: ”), readreal(N),
                  write(„групу: ”), readln(G), closefile(file_bd), my_append(address(F, S, N, G)).
                         Для  використання  в  програмі  файлів,  слід  ввести  файловий  домен,  де
                  визначається логічне ім’я файлу. У нашій програмі таким логічним ім’ям є file_bd. Це
                  ім’я предикатами програми зв’язується з ім’ям файлу БД.







                                                              53
   48   49   50   51   52   53   54   55   56   57   58