Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по ИИС.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
3.88 Mб
Скачать

Загрузка фактов из файла в период исполнения программы

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.