Базы данных
Внутренняя БД (часто называют динамическая база данных) хранится в текстовом файле, она может быть целиком считана в оперативную память и быстро обработана. Внутренняя база данных состоит из фактов, которые можно динамически, в процессе выполнения программы, добавлять в базу данных и удалять из нее, сохранять в файле, загружать факты из файла в базу данных. Эти факты могут использовать только предикаты, описанные в разделе описания предикатов базы данных.
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 во внутренней базе данных без имени. | 
Пример: Имеется база данных – список имён. Составить программу, которая будет проводить пополнение БД.