Программирование на языке Пролог | страница 98
Целевое утверждение nonvar(X) согласуется с базой данных, если X на текущий момент не является неконкретизированной переменной. Предикат nonvar является, таким образом, противоположным по отношению к предикату var. Действительно, он может быть определен на Прологе следующим образом:
nonvar(X):- var(X),!, fail.
nonvar(_).
Целевое утверждение atom(X) согласуется с базой данных, если текущее значение X является атомом в смысле языка Пролог. Как следствие возможен следующий диалог:
?- atom(23).
нет
?- atom(apples).
да
?- atom('/us/qris/pl. 123').
да
?- atom("этo строка").
нет
?- atom(X).
нет
?- atom(book(bronte,w_h,X)).
нет
Целевое утверждение integer(X) согласуется с базой данных, если на текущий момент X обозначает целое число. Этот предикат можно использовать при определении простого предиката для упрощения арифметических выражений, где необходимо знать, является ли выражение целым числом (см., например, разд. 7.12).
Целевое утверждение atomic(X) согласуется с базой данных, если на текущий момент X обозначает либо целое число, либо атом. Предикат atomic может быть определен через предикаты atom и integer следующим образом:
atomic(X):- atom(X).
atomic(X):- integer(X)
6.4. Работа с утверждениями как с термами
Пролог позволяет программисту анализировать и изменять свою программу (т. е. утверждения, которые используются для доказательства согласованности его целевых утверждений). Это непосредственно следует из того, что утверждения можно рассматривать как обычные структуры языка Пролог. В связи с этим в Прологе есть встроенные предикаты, позволяющие программисту следующее:
• Создавать структуру, представляющую утверждения в базе данных.
• Добавлять к базе данных утверждение, представленное заданной структурой.
• Удалять из базы данных утверждение, представленное заданной структурой.
Большинство операций над базой данных могут быть выполнены с помощью этих предикатов и обычных операций языка Пролог для конструирования и декомпозиции структур. В дополнение к приведенным здесь примерам в разд. 7.8 представлены некоторые способы использования данных предикатов для добавления и удаления утверждений.
Прежде чем мы рассмотрим соответствующие предикаты, необходимо понять, как утверждения Пролога могут быть представлены в виде структур. Для простого факта такой структурой является соответствующий ему предикат с аргументами. То есть факт, подобный