2.4.19 Типы спецификаторов

Тип спецификатор — это выражение, обозначающее тип. Тип представляет собой набор возможных значений. Типы спецификаторов можно классифицировать на примитивные и составные типы.

Типы спецификаторов используются для нескольких целей, включая: документирование интерфейсов функций с помощью деклараций (см. Форма declare), указание типов слотов структуры (см. Структуры в Расширения Common Lisp для GNU Emacs Lisp)), выполнение проверок типов с помощью cl-the (см. Декларации в Расширения Common Lisp для GNU Emacs Lisp)), а также помощь нативному компилятору (см. Компиляция Lisp в нативный код) в оптимизации генерации кода и выводе сигнатур функций.

Примитивные типы спецификаторы

Примитивные типы спецификаторы — это базовые типы (т.е. не составленные другими типами спецификаторами).

Встроенные примитивные типы (такие как integer, float, string и т. д.) перечислены в Иерархия типов объектов Emacs Lisp.

Составные типы спецификаторы

Составные типы служат для определения более сложных или точных спецификаций типов путем объединения или модификации более простых типов.

Список составных типов спецификаторов:

(or type-1 … type-n)

Тип спецификатор or описывает тип, который удовлетворяет хотя бы одному из заданных типов.

(and type-1 … type-n)

Аналогично, тип спецификатор and описывает тип, который удовлетворяет всем заданным типам.

(not type)

Тип спецификатор not определяет любой тип, кроме указанного.

(member value-1 … value-n)

Тип спецификатор member позволяет указать тип, который включает только явно перечисленные значения.

(function (arg-1-type … arg-n-type) return-type)

Тип спецификатор function используется для описания типов аргументов и типа возвращаемого значения функции. Типы аргументов могут чередоваться с символами &optional и &rest, чтобы соответствовать аргументам функции (см. Возможности списков аргументов).

Следующий тип спецификатор представляет функцию, чей первый параметр имеет тип symbol, второй необязательный параметр имеет тип float, а возвращаемое значение — integer:

 (function (symbol &optional float) integer)
(integer lower-bound upper-bound)

Тип спецификатор integer также может использоваться как составной тип спецификатор для определения подмножества целочисленных значений путем указания диапазона. Это позволяет точно контролировать, какие целые числа допустимы для данного типа.

lower-bound — это минимальное целочисленное значение в диапазоне, а upper-bound — максимальное. Вы можете использовать * вместо нижней или верхней границы, чтобы указать отсутствие ограничений.

Следующее представляет все целые числа от -10 до 10:

(integer -10 10)

Следующее представляет единственное значение 10:

(integer 10 10)

Следующее представляет все целые числа от минус бесконечности до 10:

(integer * 10)