CLtL2 не является полномочным для Common Lisp. CLtL2 описывает язык до стандартизации ANSI.
Используйте Common Lisp HyperSpec, который получен из стандарта ANSI CL: CLHS 4.2.3 Спецификаторы типа .
NUMBER - это спецификатор атомарного типа .
Спецификаторы типа, которые можно записать в виде списка с информацией вспомогательного типаназываются спецификатор составного типа , а некоторые спецификаторы только составного типа .
В глоссарии говорится:
атомарный спецификатор типа n. спецификатор типа, который является атомарным. Для каждого атомарного спецификатора типа x существует эквивалентный спецификатор составного типа без предоставленных аргументов (x).
Это будет означать, что (number)
является допустимым спецификатором типа. Некоторые реализации принимают его: LispWorks, ABCL, GCL, ...
Поскольку глоссарий является частью стандарта, это может быть ошибкой и / или упущением в SBCL, CLISP, Clozure CL,...
Тогда использование спецификаторов типов допустимо:
(declaim (type number *FOO*))
(declaim (type (number) *FOO*))
(typep *FOO* 'number)
(typep *FOO* '(number))