Шаг 34.
Основы логического программирования.
Простые объекты данных

    На этом шаге мы рассмотрим простые объекты данных.

    Простой объект данных - это переменная или константа. Не путайте это значение слова "константа" с символьными константами, которые вы определяете в разделе 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).

Таблица 1. Символьные константы, представляющие специальные функции
Константа Описание
' \n' Новая строка (перевод строки)
' \t' Табуляция (горизонтальная)

    Символьные константы могут также быть записаны своим десятичным ASCII-кодом после управляющего символа, например:

   '\225'      В
   '\134'	 Ж

Числа

    Числа могут быть целыми (integer) или вещественными (real). Вещественные имеют значения от 1е-308 до 1е308 (от 10-308 до 10+308). Примеры целых и вещественных чисел приведены в таблице 2.

Таблица 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.

Таблица 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.

    На следующем шаге мы рассмотрим составные объекты данных и функторы.




Предыдущий шаг Содержание Следующий шаг