Объекты данных
Программа на языке Пролог обычно описывает некую действительность. Объекты (элементы) описываемого мира представляются с помощью термов. Терм интуитивно означает объект. Существует 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).
nо
?- f( a, X) == f( a, Y).
no
?- X \== Y.
yes
?- t( X, f( a, Y) ) == t( X, f( a, Y) ).
yes
Давайте в качестве примера переопределим отношение