- •Лабораторная работа № 1. Малая экспертная система.
- •Теоретические сведения
- •Диагностические экспертные системы.
- •Пример применения байесовской стратегии оценки выводов
- •Контрольные задания:
- •Контрольные вопросы:
- •Лабораторная работа № 2. Знакомство с инструментальными средствами для создания экспертных систем.
- •Теоретические сведения
- •Контрольное задание:
- •Контрольное задание:
- •Контрольные вопросы:
- •Лабораторная работа № 4.
- •Теоретические сведения
- •Контрольное задание:
- •Основные стандартные домены
- •Основные стандартные предикаты:
- •Ключевые слова
- •Контрольные задания:
- •Контрольные вопросы:
- •Лабораторная работа №7. Предложения (факты и правила), цели на языке пролог.
- •Теоретические сведения Clauses (условия): Facts (факты) и Rules (правила)
- •О фактах
- •Контрольные вопросы:
- •Лабораторная работа №8. Переменные на языке программирования пролог.
- •Теоретические сведения
- •Анонимные переменные
- •Контрольное задание:
- •Принципы отката:
- •Контрольные задания:
- •Преимущества рекурсии
- •Оптимизация обратной рекурсии
- •Контрольные задания:
- •Объявление списков
- •Головы и хвосты
- •Обработка списков
- •Использование списков
- •Контрольное задание:
- •Контрольные вопросы:
- •Лабораторная работа №13. Секция фактов Лабораторная работа № 1.
- •Теоретические сведения
- •Объявление секций фактов
- •Модификация секции фактов
- •Добавление фактов в период исполнения программы
- •Загрузка фактов из файла в период исполнения программы
- •Удаление фактов в период исполнения программы
- •Удаление нескольких фактов сразу
- •Ключевые слова для объявления фактов
- •Описания Факты, объявленные с ключевым словом nondeterm
- •Факты, объявленные с ключевым словом determ
- •Факты, объявленные с ключевым словом single
- •Сохранение базы данных фактов во время выполнения программы
- •Контрольные задания:
- •Контрольные вопросы:
Загрузка фактов из файла в период исполнения программы
consult читает файл fileName, содержащий факты, объявленные в секции фактов и добавляет их в конец соответствующей секции фактов. consult требует один или два аргумента. В первом случае - это имя файла, содержащего факты, во втором - к нему добавляется еще имя секции фактов.
В отличие от assertz, если вы вызываете, consult только с одним аргументом (без имени секции фактов), то прочитаны будут только те факты, которые были объявлены в секции dbasedom (по умолчанию).
Если вы вызываете consult с двумя аргументами (именем файла и именем секции фактов), то будут прочитаны только те факты, которые относятся к указанной секции фактов. Если файл не содержит фактов относящихся к ней, то consult возвратит ошибку.
Предикат consult читает один факт за обращение; если файл имеет десять фактов, и седьмой факт содержит синтаксическую ошибку, consult добавит первые шесть фактов в секцию фактов, затем выдаст сообщение об ошибке.
Заметьте, consult читает файл в точно том же самом виде, в котором он был сохранён (для того, чтобы читать факты с наибольшей скоростью). Существуют следующие правила, которым должны удовлетворять данные, находящиеся в файле (Visual Prolog работает с текстовыми файлами):
не должно быть заглавных букв, кроме как в строках, заключенных в двойные кавычки;
не должно пробелов, кроме как в строках, заключенных в двойные кавычки;
не должно быть комментариев;
не должно быть пустых строк;
не должно быть символов, не заключенных в двойные кавычки.
Вы должны быть осторожны при изменении или создании такого файла фактов при помощи текстового редактора.
Удаление фактов в период исполнения программы
retract удаляет первые факты из секции фактов, которая соответствует удаляемому факту, при этом всем свободным переменным присваиваются все возможные значения в данном факте в процессе работы retract. Удаление факта из секции фактов соответствует доступу к нему, с побочным эффектом, который заключается в том, что факт, к которому обращаются, будет удален. Если предикат секции фактов, к которому обращается retract, не удаляется, это значит, что он был объявлен детерминированным, retract недетерминирован и при бэктрэкинге он удаляет и возвращает, соответствующие факты. Когда все соответствующие факты удалены, retract производит откат (fail).
Удаление нескольких фактов сразу
retractall удаляет все факты, которые соответствуют вашей секции фактов.
retractall всегда успешен только однажды, и вы не можете получить выходные значения от retractall. Это означает, что как и с предикатом not, вы должны использовать, анонимную переменную (_) для свободных переменных.
Как с assert и retract, вы можете использовать дополнительный второй аргумент для проверки типа. И, как с retract, если вы вызываете retractall с анонимной переменной, он удалит все факты из данной секции фактов.
Ключевые слова для объявления фактов
Факты могут быть объявлены с несколькими дополнительными ключевыми словами:
NONDETERM объявляет, что может существовать любое количество фактов данного типа (fact_N). Так определяются все факты по умолчанию.
DETERM объявляет, что может существовать только один факт fact_N в данный момент времени.
GLOBAL объявляет, что секция фактов глобальна в проекте.
SINGLE объявляет, что всегда должен существовать один факт fact_N. Fact_N - это функтор для факта (предиката), принадлежащего этой секции фактов.
NOCOPY объявляет, что данные не копируются из кучи в Глобальный Стек (GStack), когда происходит обращение к факту. Обычно, при обращении к факту, чтобы связать его с переменной или с составным объектом, факт копируется в GStack.
