Если типа задаётся списком, car элемент данного списка является символом, и остаток списка — вспомогательной информацией. В большинстве случаев вспомогательная информация может быть неопределена. Неопределённая дополнительная информация указывается с помощью *. Например, для полного описания векторного типа, должны быть указаны тип элементов и их количество:
Для указания неопределённой длины, можно записать:
Для указания неопределённого типа элемента, можно записать:
Можно также оставить неопределёнными и тип элемента, и длину:
Допустим, что два спецификатора являются одинаковыми за исключением того, что первый содержит *, а второй содержит конкретное значение. Тогда второй тип является подтипом первого типа.
array | fixnum | package | simple-string |
atom | float | pathname | simple-vector |
bignum | function | random-state | single-float |
bit | hash-table | ratio | standard-char |
bit-vector | integer | rational | stream |
character | keyword | readtable | string |
list | sequence | ||
compiled-function | long-float | short-float | symbol |
complex | nil | signed-byte | t |
cons | null | simple-array | unsigned-byte |
double-float | number | simple-bit-vector | vector |
Для удобства существует следующее правило: если список в конце содержит незаданные элементы (*), то они могут быть опущены. Если все, за исключением первого, элементы не специфицированы, то данный список может быть упрощён вплоть до упразднения скобок и превращения его в простой символ, который был в car. Например, (vector * *) может быть записан как (vector), а затем как vector.