logo search
Основы искусственного интеллекта

Работа с внутренними базами данных: добавление и удаление фактов из базы данных.

В прологе легко реализуются реляционные БД. Любая таблица этой БД, может быть описана соответствующим набором фактов, где каждой записи таблицы будет соответствовать один факт, каждому полю — аргумент предиката реализующего таблицу.

Внутренняя БД — это БД, которая обрабатывается исключительно в оперативной памяти компьютера, в отличии от внешней, которая может обрабатываться на диске.

Внутренняя БД обрабатывается быстрее, но ее объем ограничен объемом оперативной памяти. Для обработки больших массивов данных, используют внешние БД.

Внутренняя БД состоит из фактов, которые можно в процессе компиляции добавлять в БД, удалять из БД, сохранять в файле, загружать факты из файла БД. Эти факты могут использовать только предикаты описанные в разделе предикатов БД.

Database – имя БД имя предиката. (имя домена аргумент1, …. аргумент n).

Если раздел описания предикатов БД в программе только1, то БД может не иметь имени, в этом случае имя по-умолчанию; в случае наличия в программе нескольких БД, только 1 из них может быть без имени. Описание предикатов БД аналогично описанию предикатов раздела predicates. Однако, эти предикаты можно использовать в качестве аргументов встроенных предикатов. Кроме того, факты использующие эти предикаты можно добавлять и удалять во время компиляции.

В БД могут содержаться только факты. Встроенные предикаты для работы в БД, могут содержать один/два аргумента. Одноаргументный вариант использования, если внутренняя БД не имеет имени. Если же база именована, то используются два аргумента в предикате, причем второй аргумент — это имя БД.

Для добавления фактов во внутреннюю БД используются предикаты: asserta - в начало БД; assertz, assert – в конец БД.

Для удаления фактов из БД используются: retract – удаляет первый сначала факт, который может быть отождествлен с его первым параметром. Для удаления всех фактов из БД используется retractall, первым аргументом может быть анонимная переменная.

Для сохранения динамической БД на диске: предикат save. Он сохраняет ее в текстовый файл, с именем, которое было указано в качестве первого параметра предиката. Факты, сохраненные в текстовом файле, могут быть загружены в оперативную память компьютера предикатом consult. Первый аргумент этого предиката — имя текстового файла, с которого нужно загрузить факты. Один факт должен занимать одну строку. Количество и тип аргументов должны соответствовать описанию предиката в разделе database. В файле не должно быть пустых строк, внутри фактов не должно быть пробелов, за исключение тех, которые содержатся внутри строк в кавычках.