2 Типы данных Lisp

Lisp объект — это фрагмент данных, который используется и обрабатывается программами Lisp. Для наших целей тип или тип данных — это набор возможных объектов.

Каждый объект принадлежит по крайней мере к одному типу. Объекты одного типа имеют схожую структуру и обычно могут использоваться в одинаковых контекстах. Типы могут перекрываться, и объекты могут принадлежать двум или более типам. Следовательно, мы можем спросить, принадлежит ли объект к определенному типу, но не можем спросить о типе объекта.

Несколько фундаментальных типов объектов встроены в Emacs. Эти, из которых строятся все остальные типы, называются примитивными типами. Каждый объект принадлежит только одному примитивному типу. Эти типы включают целое число (integer), число с плавающей запятой (float), cons, символ (symbol), строка (string), вектор (vector), таблица хешей (hash-table), подпрограмма (subr), функция байт-кода (byte-code function) и запись (record), а также несколько специальных типов, таких как буфер (buffer), связанных с редактированием. (См. Типы редактирования.)

Каждый примитивный тип имеет соответствующую функцию Lisp, которая проверяет, является ли объект членом этого типа.

Lisp отличается от многих других языков тем, что его объекты самотипизирующиеся: примитивный тип каждого объекта неявно содержится в самом объекте. Например, если объект является вектором, ничто не может рассматривать его как число; Lisp знает, что это вектор, а не число.

В большинстве языков программист должен объявить тип данных каждой переменной, и тип известен компилятору, но не представлен в данных. Такие объявления типов не существуют в Emacs Lisp. Переменная Lisp может иметь любой тип значения, и она запоминает любое значение, которое вы в нее помещаете, включая тип. (На самом деле, небольшое количество переменных Emacs Lisp могут принимать значения только определенного типа. См. Переменные с ограниченными значениями.)

В этой главе описывается назначение, печатное представление и синтаксис чтения каждого из стандартных типов в GNU Emacs Lisp. Подробную информацию о том, как использовать эти типы, можно найти в последующих главах.