4.10 Подбираемый тип

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

[Функция] upgraded-array-element-type type

Функция возвращает спецификатор типа, наиболее близкий к указанному, как если бы последний использовался в функции make-array. Результат обязательно является супертипом для заданного type. Кроме того, если тип A является подтипом B, тогда (upgraded-array-element-type A) является подтипом (upgraded-array-element-type B).

Способ того, как обновляется тип элемента массива, зависит только от запрашиваемого типа элемента и не зависит от других свойств массива, таких как размер, ранг, расширяемость, наличия или отсутствия указателя заполнения, или относительности.

Следует отметить, что upgraded-array-element-type может быть определён, как

(defun upgraded-array-element-type (type)
  (array-element-type (make-array 0 :element-type type)))

но, это определение и имеет недостаток в виде создания и удаления массива. Умная реализация конечно может имитировать создание для таких случаев.


[Функция] upgraded-complex-part-type type

Функция возвращает спецификатор типа, указывающий на тип наиболее приближенной для указанного типа type для частей комплексного числа. Результат обязательно должен быть супертипом для переданного type. Кроме того, если тип A является подтипом B, тогда (upgraded-complex-part-type A) является подтипом (upgraded-complex-part-type B).