Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Факты 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)).

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал