На этом шаге мы рассмотрим простые объекты данных.
Простой объект данных - это переменная или константа. Не путайте это значение слова "константа" с символьными константами, которые вы определяете в разделе constants программы. То, что мы здесь называем константой, это нечто, идентифицирующее объект, который нельзя изменять: символ (char), число (integer или real) или атом (symbol или string).
Названия переменных должны начинаться с заглавной буквы (A-Z) или с символа подчеркивания (_). Символ подчеркивания представляет анонимную переменную, которая используется в ситуации "неважно что". В Прологе переменная может связываться с любым допустимым аргументом Пролога или объектом данных.
Переменные Пролога локальны, а не глобальны. Так, если два предложения содержат переменную, названную X, то это две различные переменные. Они могут быть связаны друг с другом, если совпадут во время унификации, но обычно они не оказывают влияния друг на друга.
Константы включают символы, числа и атомы. Опять же, не путайте константы в данном контексте с символьными константами, определенными в разделе constants программы. Значение константы - это ее имя. Так константа 2 может соответствовать только числу 2, а константа abracadabra - только идентификатору abracadabra.
Символы имеют тип char. Печатные символы (ASCII 32-127) - это цифры (0-9), прописные буквы A-Z, строчные буквы a-z, символы пунктуации и специальные символы.
Символ-константа записывается в простых кавычках:
'a' '3' '*' '{' 'W' 'А'Если же вы хотите записать обратную косую черту или простую кавычку, как литерную константу, вы должны поставить перед ней символ обратный слэш \ (управляющий escape-символ):
'\\' backslash '\'' single quote.
Существует набор символьных констант, которые представляют специальные функции в том случае, если им предшествует управляющий символ (таблица 1).
Константа | Описание |
---|---|
' \n' | Новая строка (перевод строки) |
' \t' | Табуляция (горизонтальная) |
Символьные константы могут также быть записаны своим десятичным ASCII-кодом после управляющего символа, например:
'\225' В '\134' Ж
Числа могут быть целыми (integer) или вещественными (real). Вещественные имеют значения от 1е-308 до 1е308 (от 10-308 до 10+308). Примеры целых и вещественных чисел приведены в таблице 2.
Целые | Вещественные |
---|---|
3 | 3. |
-77 | 34.96 |
32034 | -32769 |
-10 | 4е27 |
0 | -7.4е-296 |
Атомы имеют тип идентификатор (symbol) или строка (string). Отличие между ними - главным образом вопрос машинного представления и реализации, и, в основном, оно синтаксически не заметно. Когда атом передается в качестве аргумента при вызове предиката, то к какому домену принадлежит атом - symbol или string - определяется по тому, как описан этот аргумент в декларации предиката.
Пролог автоматически преобразует типы между доменами string и symbol, поэтому вы можете использовать атомы symbol в доменах string и наоборот. Однако принято считать, что объект в двойных кавычках принадлежит домену string, а объект, не нуждающийся в кавычках, домену symbol. Атомы типа symbol - это имена, начинающиеся со строчной буквы и содержащие только буквы, цифры и знак подчеркивания.
Атомы типа string выделяются двойными кавычками и могут содержать любую комбинацию литер, кроме ASCII-нуля (0, бинарный нуль), который обозначает конец строки атома.
Примеры строк и идентификаторов приведены в таблице 3.
Атомы-идентификаторы | Атомы-строки |
---|---|
food | "Jesse James" |
rick_Jones_2nd | "123 Pike street" |
fred_Flintstone_1000_Bc_Bedrock | "jon" |
a | "a" |
new_york | "New York" |
Так как string/symbol взаимозаменяемы, их отличие не существенно. Однако имена предикатов и функторы для составных объектов должны соответствовать синтаксическим соглашениям домена symbol.
На следующем шаге мы рассмотрим составные объекты данных и функторы.