- •Лабораторная работа № 1. Малая экспертная система.
- •Теоретические сведения
- •Диагностические экспертные системы.
- •Пример применения байесовской стратегии оценки выводов
- •Контрольные задания:
- •Контрольные вопросы:
- •Лабораторная работа № 2. Знакомство с инструментальными средствами для создания экспертных систем.
- •Теоретические сведения
- •Контрольное задание:
- •Контрольное задание:
- •Контрольные вопросы:
- •Лабораторная работа № 4.
- •Теоретические сведения
- •Контрольное задание:
- •Основные стандартные домены
- •Основные стандартные предикаты:
- •Ключевые слова
- •Контрольные задания:
- •Контрольные вопросы:
- •Лабораторная работа №7. Предложения (факты и правила), цели на языке пролог.
- •Теоретические сведения Clauses (условия): Facts (факты) и Rules (правила)
- •О фактах
- •Контрольные вопросы:
- •Лабораторная работа №8. Переменные на языке программирования пролог.
- •Теоретические сведения
- •Анонимные переменные
- •Контрольное задание:
- •Принципы отката:
- •Контрольные задания:
- •Преимущества рекурсии
- •Оптимизация обратной рекурсии
- •Контрольные задания:
- •Объявление списков
- •Головы и хвосты
- •Обработка списков
- •Использование списков
- •Контрольное задание:
- •Контрольные вопросы:
- •Лабораторная работа №13. Секция фактов Лабораторная работа № 1.
- •Теоретические сведения
- •Объявление секций фактов
- •Модификация секции фактов
- •Добавление фактов в период исполнения программы
- •Загрузка фактов из файла в период исполнения программы
- •Удаление фактов в период исполнения программы
- •Удаление нескольких фактов сразу
- •Ключевые слова для объявления фактов
- •Описания Факты, объявленные с ключевым словом nondeterm
- •Факты, объявленные с ключевым словом determ
- •Факты, объявленные с ключевым словом single
- •Сохранение базы данных фактов во время выполнения программы
- •Контрольные задания:
- •Контрольные вопросы:
Объявление секций фактов
Ключевое слово facts или database определяет начало последовательности описания для предикатов, описывающих секцию фактов. В период исполнения программы вы можете при помощи клавиатуры, используя предикаты asserta и assertz добавлять в секцию фактов факты, но не правила. Для этого можно также использовать стандартный предикат consult, который считывает факты из файла.
Имена предикатов в секции фактов должны быть уникальны в пределах модуля исходного файла, вы не можете использовать то же самое имя предиката в двух различных секциях фактов. Однако предикаты в названных секциях фактов являются локальными в модуле, в котором они объявлены, и не должны ссылаться на предикаты, описанные в других разделах.
Модификация секции фактов
Факты Visual Prolog для предикатов базы данных могут быть определены во время компиляции в разделе предложений. В период исполнения программы факты можно добавлять и удалять, используя предикаты, описанные ниже. Обратите внимание, что факты, указанные в разделе предложений, могут быть удалены также, они не отличаются от фактов, которые добавляют в период исполнения программы.
Стандартные предикаты Visual Prolog для работы с базами данных assert, asserta, assertz, retract, retractall, consult, и save, имеют один или два аргумента. Дополнительный второй аргумент - это имя секции фактов.
Есть два ограничения на использование предикатов в секциях фактов:
Вы можете добавить их в секцию фактов только как факты, но не как правила.
Факты в секции фактов не могут иметь свободных переменных.
Можно создавать несколько секций фактов, но чтобы сделать это, вы должны явно назвать каждую из них.
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)).
