Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по ИИС.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
3.88 Mб
Скачать

Объявление секций фактов

Ключевое слово facts или database определяет начало последовательности описания для предикатов, описывающих секцию фактов. В период исполнения программы вы можете при помощи клавиатуры, используя предикаты asserta и assertz добавлять в секцию фактов факты, но не правила. Для этого можно также использовать стандартный предикат consult, который считывает факты из файла.

Имена предикатов в секции фактов должны быть уникальны в пределах модуля исходного файла, вы не можете использовать то же самое имя предиката в двух различных секциях фактов. Однако предикаты в названных секциях фактов являются локальными в модуле, в котором они объявлены, и не должны ссылаться на предикаты, описанные в других разделах.

Модификация секции фактов

Факты Visual Prolog для предикатов базы данных могут быть определены во время компиляции в разделе предложений. В период исполнения программы факты можно добавлять и удалять, используя предикаты, описанные ниже. Обратите внимание, что факты, указанные в разделе предложений, могут быть удалены также, они не отличаются от фактов, которые добавляют в период исполнения программы.

Стандартные предикаты Visual Prolog для работы с базами данных assert, asserta, assertz, retract, retractall, consult, и save, имеют один или два аргумента. Дополнительный второй аргумент - это имя секции фактов.

Есть два ограничения на использование предикатов в секциях фактов:

  1. Вы можете добавить их в секцию фактов только как факты, но не как правила.

  2. Факты в секции фактов не могут иметь свободных переменных.

Можно создавать несколько секций фактов, но чтобы сделать это, вы должны явно назвать каждую из них.

FACTS - mydatabase

myFirstRelation(integer)

mySecondRelation(real, string)

myThirdRelation(string)

Это описание создает секцию фактов с именем mydatabase. Если вы не указываете имя для базы данных фактов, то секция фактов именуется по умолчанию именем dbasedom.

Добавление фактов в период исполнения программы

В период исполнения программы, факты можно добавить в секции фактов при помощи предикатов: assert, asserta и assertz или, загружая факты из файла с использованием предиката consult.

Есть три предиката, для добавления единичного факта в период исполнения программы: asserta добавляет новый факт в секцию фактов перед уже существующими фактами, в то время как assert и assertz добавляют новый факт после существующих фактов.

Предикаты добавления всегда должны «знать», в какую секцию фактов необходимо добавить факт, потому что имена предикатов секции фактов являются уникальными в пределах программы или модуля. Однако вы можете использовать дополнительный второй аргумент для проверки типа, чтобы гарантировать, что вы изменяете нужную секцию фактов.

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

FACTS - people

person(string,string)

PREDICATES

uassert(people)

CLAUSES

uassert(person(Name,Address)):-

person(Name,Address), ! ;

assert(person(Name,Address)).