Книга: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ

6.4. Работа с утверждениями как с термами

6.4. Работа с утверждениями как с термами

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

• Создавать структуру, представляющую утверждения в базе данных.

• Добавлять к базе данных утверждение, представленное заданной структурой.

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

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

Прежде чем мы рассмотрим соответствующие предикаты, необходимо понять, как утверждения Пролога могут быть представлены в виде структур. Для простого факта такой структурой является соответствующий ему предикат с аргументами. То есть факт, подобный

нравится(джон,Х)

может рассматриваться как обычная структура с функтором нравится (имеющим два аргумента) и аргументами джон и X. С другой стороны, правило можно рассматривать как структуру с главным функтором ':-'(с двумя аргументами). Этот функтор объявлен как инфиксный оператор. Первым аргументом является заголовок утверждения, а вторым – его тело. Так что

нравится(джон, X):- нравится(Х,вино)

есть не что иное, как

':-' (нравится(джон,Х), нравится(Х,вино))

– совершенно обычная структура. Далее, если правило содержит более одного целевого утверждения, то они считаются объединенными в структуры с функтором ',' (с двумя аргументами). Этот предикат также объявлен как инфиксный оператор. Так что

прародитель(Х, Z):- родитель(Х, Y), родитель(Y,Z)

есть в действительности просто

':-'(прародитель(Х,Z),Y(родитель(Х,Y),родитель(Y, Z))

Далее приведены предикаты, позволяющие программисту анализировать и изменять его утверждения.

Оглавление книги

Оглавление статьи/книги

Генерация: 1.353. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз