Объекты данных

Программа на языке Пролог обычно описывает некую действительность. Объекты (элементы) описываемого мира представляются с помощью термов. Терм интуитивно означает объект. Существует 4 вида термов: атомы, числа, переменные и составные термы. Атомы и числа иногда группируют вместе и называют простейшими термами.

Атом - это отдельный объект, считающийся элементарным. В Прологе атом представляется последовательностью букв нижнего и верхнего регистра, цифр и символа подчеркивания '_', начинающейся со строчной буквы. Кроме того, любой набор допустимых символов, заключенный в апострофы, также является атомом. Наконец, комбинации специальных символов + - * = < > : & также являются атомами (следует отметить, что набор этих символов может отличаться в различных версиях Пролога).


Пример
Представленные далее последовательности являются корректными атомами:

b, abcXYZ, x_123, efg_hij, коля, слесарь,

'Это также атом Пролога',

+, ::, <---->, ***

Числа в Прологе бывают целыми (Integer) и вещественными (Float).

Синтаксис целых чисел прост, как это видно из следующих примеров: 1, 1313, 0, -97. Не все целые числа могут быть представлены в машине, их диапазон ограничен интервалом между некоторыми минимальным и максимальным значениями, определенными конкретной реализацией Пролога. SWI-Prolog допускает использование целых чисел в диапазоне от -2147483648 (-231) до 2147483647 (231-1).

Синтаксис вещественных чисел также зависит от конкретной реализации. Мы будем придерживаться простых правил, понятных из следующих примеров: 3.14, -0.0035, 100.2. При обычном программировании на Прологе вещественные числа используются редко. Причина этого кроется в том, что Пролог - язык, предназначенный в первую очередь для обработки символьной, а не числовой информации. При символьной обработке часто используются целые числа, нужда же в вещественных числах невелика. Везде, где можно, Пролог старается привести число к целому виду.

Переменными в Прологе являются строки символов, цифр и символа подчеркивания, начинающиеся с заглавной буквы или символа подчеркивания:

X, _4711, X_1_2, Результат, _x23, Объект2, _

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

Структурированными объектами(или структурами )называются объекты,ко-торые имеют несколько компонентов.Сами компоненты,в свою очередь,так же мо-гут быть структурами.Например,дата может рассматриваться как структура с тре-мя компонентами:число,месяц,год.Несмотря на то что структуры состоят из не-скольких компонентов,они рассматриваются в программе как целостные объекты.

Для соединения компонентов в целостный объект необходимо выбрать функтор.

4. Засоби перевірки типів елементів даних в Пролозі

number(X )принимает истинное значение,еслиX — число или переменная,значени-ем которой является число

var {X).Выполняется успешно,если X в настоящее время—неконкретизи-рованная переменная.

•nonvar(X).Выполняется успешно,еслиX —не переменная илиX—уже

Конкретизированная переменная.

•atom !X).Принимает истинное значение,еслиX в настоящее время обозначает атом.

•intege r(X).Принимает истинное значение,еслиX в настоящее время обозначает целое число.

•floa t[X).Принимает истинное значение,если х в настоящее время обозначает число с плавающей точкой.

•number(X).Принимает истинное значение,еслиX в настоящее время обозначает число,

•atomi c(X).Принимает истинное значение,если X в настоящее время обозначает число или атом.

•compound(X).Принимает истинное значение,если X в настоящее время обозначает составной терм(структуру).

5. Різні типи рівності елементів даних в Пролозі.

В каких случаях мы считаем, что два терма равны? До сих пор мы рассматривали три вида равенства в Прологе. Первый был связан с сопоставлением и записывался так:

Х = Y

Это равенство верно, если Х и Y сопоставимы. Следующий вид равенства записывался в виде

Х is E

Такое равенство выполняется, если Х сопоставим со значением арифметического выражения E. Мы также рассматривали равенства вида

Е1 =:= Е2

которые верны, если равны значения арифметических выражений Е1 и Е2. Наоборот, если значения двух арифметических выражений не равны, мы пишем

Е1 =/= Е2

Иногда нам может понадобиться более строгий вид равенства - буквальное равенство двух термов. Этот вид реализован еще одним встроенным предикатом, записываемым как инфиксный оператор '==':

Т1 == Т2

Это равенство выполняется, если термы Т1 и Т2 идентичны, т. е. имеют в точности одинаковую структуру, причем все соответствующие компоненты совпадают. В частности, должны совпадать и имена переменных. Отношение "не идентичны", дополнительное к данному, записывается так:

Tl \== T2

Приведем несколько примеров:

?- f( a, b) == f( а, b).
yes

?- f( a, b) == f( a, X).

?- f( a, X) == f( a, Y).
no

?- X \== Y.
yes

?- t( X, f( a, Y) ) == t( X, f( a, Y) ).
yes

Давайте в качестве примера переопределим отношение