- •Лабораторная работа № 1. Малая экспертная система.
- •Теоретические сведения
- •Диагностические экспертные системы.
- •Пример применения байесовской стратегии оценки выводов
- •Контрольные задания:
- •Контрольные вопросы:
- •Лабораторная работа № 2. Знакомство с инструментальными средствами для создания экспертных систем.
- •Теоретические сведения
- •Контрольное задание:
- •Контрольное задание:
- •Контрольные вопросы:
- •Лабораторная работа № 4.
- •Теоретические сведения
- •Контрольное задание:
- •Основные стандартные домены
- •Основные стандартные предикаты:
- •Ключевые слова
- •Контрольные задания:
- •Контрольные вопросы:
- •Лабораторная работа №7. Предложения (факты и правила), цели на языке пролог.
- •Теоретические сведения Clauses (условия): Facts (факты) и Rules (правила)
- •О фактах
- •Контрольные вопросы:
- •Лабораторная работа №8. Переменные на языке программирования пролог.
- •Теоретические сведения
- •Анонимные переменные
- •Контрольное задание:
- •Принципы отката:
- •Контрольные задания:
- •Преимущества рекурсии
- •Оптимизация обратной рекурсии
- •Контрольные задания:
- •Объявление списков
- •Головы и хвосты
- •Обработка списков
- •Использование списков
- •Контрольное задание:
- •Контрольные вопросы:
- •Лабораторная работа №13. Секция фактов Лабораторная работа № 1.
- •Теоретические сведения
- •Объявление секций фактов
- •Модификация секции фактов
- •Добавление фактов в период исполнения программы
- •Загрузка фактов из файла в период исполнения программы
- •Удаление фактов в период исполнения программы
- •Удаление нескольких фактов сразу
- •Ключевые слова для объявления фактов
- •Описания Факты, объявленные с ключевым словом nondeterm
- •Факты, объявленные с ключевым словом determ
- •Факты, объявленные с ключевым словом single
- •Сохранение базы данных фактов во время выполнения программы
- •Контрольные задания:
- •Контрольные вопросы:
Описания Факты, объявленные с ключевым словом nondeterm
Ключевое слово nondeterm - тип по умолчанию для фактов (предикатов базы данных), объявленных в секциях фактов. Если ни одно из ключевых слов determ или single не используется при описании факта, компилятор применяет ключевое слово nondeterm. Обычно, предикаты базы данных недетерминированы. Поскольку факты можно добавлять в любое время выполнения программы, компилятор должен всегда предполагать, что возможно найти альтернативные решения в течение бэктрэкинга.
Если вы имеете предикат базы данных, для которого вы никогда не будете иметь больше, чем один факт, вы можете описать его, как determ или single.
Факты, объявленные с ключевым словом determ
Ключевое слово determ определяет, что база данных фактов может содержать только один факт данного типа. Так, если вы попробуете добавить один, а затем второй, такой факт в базу данных, Visual Prolog выдаст ошибку (1041 Assert to a fact declared as determ, but fact already exists). В таких случаях, программист должен проявлять особую осторожность.
Предыдущий факт с determ позволяет компилятору произвести лучший код, и вы не будете получать предупреждения о недетерминированности при вызове определенных предикатов. Это полезно при использовании флагов, счётчиков и других объектов, которые являются сильно глобализированными переменными.
Особенно обратите внимание, что при удалении факта, который объявляется как determ, запрос к недетерминированным предикатам retract/1 и retract/2, будет детерминирован. Так, если вы знаете, что в любой момент секция фактов содержит не более одного экземпляра факта counter() тогда, вы можете написать:
FACTS
determ counter(integer CounterValue)
GOAL
...
retract(counter(CurrentCount)),
/* here Prolog will not set backtracking point */
Count= CurrentCount + 1,
assert(counter(Count)),
...
Вместо
FACTS
counter(integer CounterValue)
PREDICATES
determ my_retract(dbasedom)
CLAUSES
my_retract(X): - retract(X), !. % deterministic predicate
GOAL
...
my_retract(counter(CurrentCount)),
/* here Prolog will not set backtracking point */
Count= CurrentCount + 1,
asserta(counter(Count)),
...
Факты, объявленные с ключевым словом single
Ключевое слово single перед фактом fact_N объявляет, что один и только один случай факта должен всегда существовать.
Факты single должны существовать уже, когда программа вызывает соответствующую цель; поэтому, факты single должны инициализироваться в разделе предложений в исходном коде программы. Например:
FACTS
single singleFact(string, string)
CLAUSES
singleFact("", "").
Single-факты нельзя удалять. Если будет попытка применить retract к single-факту, то компилятор выдаст ошибку 249 "Attempt to retract a fact declared as single".·С момента, когда один случай single-факта существует, обращение к этому факту никогда не будет неудачным, если его вызывают со свободными аргументами. Например, следующий запрос:
singleFact(X,Y).
никогда не терпит неудачу, если X и Y - свободные переменные. Поэтому, удобно использовать single-факты в процедурах. Предикаты assert, asserta, assertz и consult применяются к single-фактам подобно предикатам retract и assert. То есть предикаты assert (consult) заменяют существующий случай факта на указанный.
Предыдущий single-факт позволяет компилятору произвести оптимизированный код для того, чтобы обеспечить оптимальное обращение к факту и обновление факта. Например, для предиката assert, примененного к single-факту, компилятор производит код, который работает более эффективно, чем, например, предикаты retract и assert, примененные к determ-факту (и тем более эффективнее, чем предикаты retract и assert, примененные к nondeterm-факту).
