Программирование на языке Пролог для искусственного интеллекта



         

Предикаты var, nоnvar, atom, integer, atomic


Термы бывают разных типов: переменные, целые числа, атомы и т.д. Если терм - переменная, то в некоторый момент выполнения программы он может оказаться конкретизированным или не конкретизированным. Далее, если он конкретизирован, то его значение может быть атомом, структурой и т. п. Иногда бывает полезно узнать, каков тип этого значения. Например, пусть мы хотим сложить значения двух переменных Х и Y:

        Z  is  X + Y

Перед вычислением этой цели необходимо, чтобы Х и Y были конкретизированы целыми числами. Если у нас нет уверенности в том, что Х и Y действительно конкретизированы целыми числами, то перед выполнением арифметического действия нужно проверить это программно.

Для этого следует воспользоваться встроенным предикатом integer (целое). Предикат integer( X) принимает значение истина, если Х - целое или если Х - переменная, имеющая целое значение. Будем говорить в этом случае, что Х "обозначает" целое. Цель для сложения Х и Y можно тогда "защитить" такой проверкой переменных Х и Y:

        . . ., integer( X), integer( Y), Z is X + Y, . . .

Если неверно, что X и Y оба являются целыми, то система и не будет пытаться их сложить. Таким образом, цели integer "охраняют" цель Z is Х + Y от бессмысленного вычисления.

Встроенные предикаты этого типа таковы: var

(переменная), nonvar (непеременная), atom

(атом), integer (целое), atomic

(атомарный). Они имеют следующий смысл:

        var( X)

Эта цель успешна, если Х в текущий момент - не конкретизированная переменная.

        nonvar( X)

Эта цель успешна, если Х - терм, отличный от переменной, или если Х - уже конкретизированная переменная.

        atom( X)

Эта цель истинна, если Х обозначает атом.

        integer( X)

Цель истинна, если Х обозначает целое.




Содержание  Назад  Вперед