Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Prolog.doc
Скачиваний:
31
Добавлен:
12.03.2015
Размер:
929.28 Кб
Скачать

Глава 9 Встроенные предикаты

В настоящей главе рассматриваются встроенные предикаты Про­лога, описываются способы обновления базы данных, вопросы вво­да/вывода и обработки файлов.

9.1. Встроенные предикаты

После загрузки системы Пролог пользователю становится досту­пен ряд системных предикатов. Они определяются с помощью либо самого Пролога, либо языка низшего уровня, используемого для реа­лизации Пролога.

Описание предикатов и способы их применения содержатся в до­кументации по конкретной реализации Пролога. При доказательстве некоторых предикатов имеет место так называемый побочный эф­фект. Благодаря ему обеспечивается интерфейс с пользователем и обработка файлов. Предикаты, обладающие побочным эффектом, обычно реализуются не на Прологе, а на языке низкого уровня, на­пример Ассемблере, либо на языке высокого уровня, таком, как Пас­каль.

Встроенные предикаты не могут быть изменены пользователем, а попытка заменить их, применяя предикаты assert и retract, приведет к сообщению об ошибке.

9.2. Обновление базы данных Пролога

Программная среда Пролога состоит из двух частей:

программный модуль Пролога:

база данных Пролога.

Программный модуль включает интерпретатор Пролога (в неко­торых реализациях и компилятор), драйвер ввода/вывода и, кроме того, системные процедуры. Пользователь обычно не имеет возмож­ности изменять программный модуль.

База данных Пролога содержит набор основных, заранее опре­деленных предикатов. Кроме того, резервируется пространство для добавления предикатов, которые будут объявлены пользователем. Механизмы добавления, удаления и обновления утверждений, заданных пользователем, классифицируются следующим образом:

1) добавление и удаление утверждений;

2) добавление утверждений из файла и замена имеющихся ут­верждений на утверждения, находящиеся в файлах для того же само­го предиката (ввод программ и повторный ввод программ).

Файл Пролога состоит из утверждений. Утверждение есть факт или правило. Утверждения обрабатываются интерпретатором (ком­пилятором) Пролога и потому должны удовлетворять синтаксиче­ским определениям.

Добавление и удаление утверждений

Как уже говорилось, в Прологе имеется набор встроенных преди­катов, позволяющих добавлять или удалять утверждения из базы данных. В гл.7 мы ввели предикаты asserta, assertz и retract, служа­щие для обновления базы данных. Подытожим ранее сказанное и рассмотрим встроенные предикаты retractall и abolish.

assertz(X)

X должен быть конкретизирован термом, не являющимся пере­менной. Терм интерпретируется как утверждение и добавляется в базу данных Пролога. Утверждение помещается в конец базы дан­ных, или если существует процедура с теми же функтором и арно­стью, то добавляется к этой процедуре. (В некоторых реализациях Пролога допустимы исключения из приведенного правила, потому необходимо обратиться к руководству по конкретной системе.)

asserta(X)

Определяется аналогично предикату assertz(X), но новое утвер­ждение становится первым утверждением в процедуре с теми же функтором и арностью.

retract(X)

Х должен быть конкретизирован составным термом. В базе данных осуществляется поиск утверждения, голова и тело которого сопоставляются с термом X. Первое такое утверждение затем уда­ляется.

retractall(X)

Удаляет из базы данных все утверждения, функтор и арность ко­торых сопоставимы с X.

abolish(P,A)

Удаляет из базы данных все утверждения для процедуры Р с ар­ностью А.

Описанные предикаты служат для обновления базы данных Про­лога во время выполнения программы.

Возможность динамического обновления программы довольно ча­сто применяется в Прологе. После удаления части базы данных с по­мощью предикатов retract и abolish необходимо запустить механизм «сборки мусора» для восстановления памяти. Алгоритм, выбранный для чистки памяти, зависит от реализации Пролога.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]