Previous: Array Elements, Up: Array Concepts


15.1.2 Specialized Arrays

An array can be a general array, meaning each element may be any object, or it may be a specialized array, meaning that each element must be of a restricted type.

The phrasing “an array specialized to type «type»” is sometimes used to emphasize the element type of an array. This phrasing is tolerated even when the «type» is t, even though an array specialized to type t is a general array, not a specialized array.

The next figure lists some defined names that are applicable to array creation, access, and information operations.

adjust-array array-has-fill-pointer-p make-array
adjustable-array-p array-in-bounds-p svref
aref array-rank upgraded-array-element-type
array-dimension array-rank-limit upgraded-complex-part-type
array-dimension-limit array-row-major-index vector
array-dimensions array-total-size vector-pop
array-displacement array-total-size-limit vector-push
array-element-type fill-pointer vector-push-extend

Figure 15.1: General Purpose Array-Related Defined Names

15.1.2.1 Array Upgrading

The upgraded array element type of a type T1

is a type T2 that is a supertype of T1

and that is used instead of T1 whenever T1

is used as an array element type for object creation or type discrimination.

During creation of an array, the element type that was requested is called the expressed array element type. The upgraded array element type of the expressed array element type becomes the actual array element type of the array that is created.

Type upgrading implies a movement upwards in the type hierarchy lattice. A type is always a subtype of its upgraded array element type. Also, if a type Tx is a subtype of another type Ty, then the upgraded array element type of Tx

must be a subtype of the upgraded array element type of Ty. Two disjoint types can be upgraded to the same type.

The upgraded array element type T2 of a type T1

is a function only of T1 itself; that is, it is independent of any other property of the array for which T2 will be used, such as rank, adjustability, fill pointers, or displacement. The function upgraded-array-element-type can be used by conforming programs to predict how the implementation will upgrade a given type.

15.1.2.2 Required Kinds of Specialized Arrays

Vectors whose elements are restricted to type character or a subtype of character are called strings. Strings are of type string. The next figure lists some defined names related to strings.

Strings are specialized arrays and might logically have been included in this chapter. However, for purposes of readability most information about strings does not appear in this chapter; see instead Chapter 16 (Strings).

char string-equal string-upcase
make-string string-greaterp string/=
nstring-capitalize string-left-trim string<
nstring-downcase string-lessp string<=
nstring-upcase string-not-equal string=
schar string-not-greaterp string>
string string-not-lessp string>=
string-capitalize string-right-trim
string-downcase string-trim

Figure 15.2: Operators that Manipulate Strings

Vectors whose elements are restricted to type bit are called bit vectors. Bit vectors are of type bit-vector. The next figure lists some defined names for operations on bit arrays.

bit bit-ior bit-orc2
bit-and bit-nand bit-xor
bit-andc1 bit-nor sbit
bit-andc2 bit-not
bit-eqv bit-orc1

Figure 15.3: Operators that Manipulate Bit Arrays