Глава 2
Типы данных

 2.1 Числа
  2.1.1 Целые числа
  2.1.2 Дробные числа
  2.1.3 Числа с плавающей точкой
  2.1.4 Комплексные числа
 2.2 Буквы
  2.2.1 Стандартные буквы
  2.2.2 Разделители строк
  2.2.3 Нестандартные символы
 2.3 Символы
 2.4 Списки и Cons-ячейки
 2.5 Массивы
  2.5.1 Векторы
  2.5.2 Строки
  2.5.3 Битовые векторы
 2.6 Хеш-таблицы
 2.7 Таблицы символов Lisp парсера (Readtables)
 2.8 Пакеты
 2.9 Имена файлов
 2.10 Потоки
 2.11 Состояние для генератора псевдослучайных чисел (Random-States)
 2.12 Структуры
 2.13 Функции
 2.14 Нечитаемые объекты данных
 2.15 Пересечение, включение и дизъюнктивность типов

Common Lisp предоставляет множество типов для объектов данных. Необходимо подчеркнуть, что в Lisp’е типизированы данные, а не переменные. Любая переменная может содержать данные любого типа. (Можно указать явно, что некоторая переменная фактически может содержать только один или конечное множество типов объектов. Однако, такая декларация может быть опущена, и программа будет выполняться корректно. Такая декларация содержит рекомендации от пользователя, и это может быть полезным при оптимизации. Смотрите declare.)

В Common Lisp’е тип данных является (возможно бесконечным) множеством Lisp объектов. Многие объекты Lisp’а принадлежат к более чем одному множеству типов, так что иногда не имеет смысла спрашивать тип объекта; вместо этого задаётся вопрос о принадлежности объекта к нужному типу. Предикат typep может использоваться для определения принадлежности объекта к заданному типу, а функция type-of возвращает тип, к которому принадлежит заданный объект.

Типы данных в Common Lisp сложены в иерархию (фактически в порядке убывания объёма) определённую отношениями подмножеств. Несомненно множества объектов, такие как множество чисел и множество строк заслуживают идентификаторов. Для многих этих идентификаторов используются символы (здесь и далее, слово «символ» ссылается на тип Lisp’овых объектов символ, известный также как литеральный атом). См. главу 4 подробно описывающую определения типов.

Множество все объектов определяется символом t. Пустой тип данных, который не содержит объектов обозначается с помощью nil.

Следующие категории объектов Common Lisp’а в особенности интересны: числа (numbers), знаки (characters), символы (symbols), списки (lists), массивы (arrays), структуры (structures) и функции (functions). Другие типы тоже, конечно, интересны. Некоторые из этих категорий имеют много подразделов. Так же есть стандартные типы, которые определены как объединение двух и более данных категорий. Вышеупомянутые категории, являясь типами объектов, менее «реальны» чем другие типы данных. Они просто составляют объединения типов для наглядности.

Вот краткое изложение различных Common Lisp’овых типов данных. Оставшиеся разделы данной главы рассматривают типы более детально, а также описывают нотации для объектов для каждого типа. Описание Lisp’овых функций, что оперируют объектами данных каждого типа будет даваться в следующих главах.

Эти категории не всегда взаимоисключаемы. Указанные отношения между различными типами данных более детально описано в разделе 2.15.