Базы данных
Внутренняя БД (часто называют динамическая база данных) хранится в текстовом файле, она может быть целиком считана в оперативную память и быстро обработана. Внутренняя база данных состоит из фактов, которые можно динамически, в процессе выполнения программы, добавлять в базу данных и удалять из нее, сохранять в файле, загружать факты из файла в базу данных. Эти факты могут использовать только предикаты, описанные в разделе описания предикатов базы данных.
DATABASE [ — <имя базы данных>]
<имя предиката>(<имя домена первого аргумента>,...,
< имя домена n-го аргумента>)
Если раздел описания предикатов базы данных в программе только один, то он может не иметь имени. В этом случае он автоматически получает стандартное имя dbasedom. В случае наличия в программе нескольких разделов описания предикатов базы данных только один из них может быть безымянным. Все остальные должны иметь уникальное имя, которое указывается после названия раздела DATABASE и тире. Когда объявлен раздел описания предикатов базы данных, компилятор внутренне объявляет соответствующий домен с таким же именем, как у этого раздела; это позволяет специальным предикатам обрабатывать факты как термы.
Описание предикатов базы данных совпадает с их описанием в разделе описания предикатов PREDICATES. Однако эти предикаты можно задействовать в качестве параметров встроенных предикатов. Кроме того, факты, использующие эти предикаты, могут добавляться и удаляться во время выполнения программы.
В базе данных могут содержаться только факты, причем факты базы данных не могут содержать свободных переменных.
Встроенные предикаты для работы с БД:
consult(DosFileName,InternalDatabaseName)(string,InternalDatabaseName) - (i,i) | Загрузка из файла DosFileName внутренней БД с именем InternalDatabaseName, объявленной как DATABASE - InternalDatabaseName. |
consult(DosFileName) (string) - (i) | Загрузка из файла DosFileName внутренней базы данных, объявленной без имени. |
save(DosFileName,InternalDatabaseName) (string,DatabaseName) - (i,i) | Сохранение внутренней базы данных, объявленной с именем InternalDatabaseName, в файле DosFileName. |
save(DosFileName) (string) - (i) | Сохранение внутренней базы данных, объявленной без имени, в файле DosFileName. |
assert(Term) (InternalDatabaseDomain) - (i) | Добавление терма (факта) Term во внутреннюю базу данных. |
asserta(Term) (InternalDatabaseDomain) - (i) | Добавление факта Term в начало базы данных. |
assertz(Term) (InternalDatabaseDomain) - (i) | Добавление факта Term в конец базы данных. |
retractall(_,InternalDbaseName) (_,DatabaseName) - (_,i) | Удаление всех термов во внутренней базе данных с указанным именем InternalDbaseName. |
retractall(Term) (InternalDatabaseDomain) - (_) | Удаление всех термов вида Term во внутренней базе данных без имени. |
Пример: Имеется база данных – список имён. Составить программу, которая будет проводить пополнение БД.