Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Модификация секции фактов
Факты 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)).
|