**Common Lisp the Language, 2nd Edition**

The following type specifiers are, for the most part,
abbreviations for other type specifiers that would be far too
verbose to write out explicitly (using, for example, `member`).

`(integer`*low**high*)-
Denotes the integers between
*low*and*high*. The limits*low*and*high*must each be an integer, a list of an integer, or unspecified. An integer is an inclusive limit, a list of an integer is an exclusive limit, and`*`means that a limit does not exist and so effectively denotes minus or plus infinity, respectively. The type`fixnum`is simply a name for`(integer`for implementation-dependent values of*smallest**largest*)*smallest*and*largest*(see`most-negative-fixnum`and`most-positive-fixnum`). The type`(integer 0 1)`is so useful that it has the special name`bit`. `(mod`*n*)-
Denotes the set of non-negative integers less than
*n*. This is equivalent to`(integer 0`or to*n*-1)`(integer 0 (`.*n*)) `(signed-byte`*s*)-
Denotes the set of integers that can be represented
in two's-complement form in a byte of
*s*bits. This is equivalent to`(integer )`. Simply`signed-byte`or`(signed-byte *)`is the same as`integer`. `(unsigned-byte`*s*)-
Denotes the set of non-negative integers that can be
represented in a byte of
*s*bits. This is equivalent to`(mod )`, that is,`(integer 0 )`. Simply`unsigned-byte`or`(unsigned-byte *)`is the same as`(integer 0 *)`, the set of non-negative integers. `(rational`*low**high*)-
Denotes the rationals between
*low*and*high*. The limits*low*and*high*must each be a rational, a list of a rational, or unspecified. A rational is an inclusive limit, a list of a rational is an exclusive limit, and`*`means that a limit does not exist and so effectively denotes minus or plus infinity, respectively. `(float`*low**high*)-
Denotes the set of floating-point numbers between
*low*and*high*. The limits*low*and*high*must each be a floating-point number, a list of a floating-point number, or unspecified; a floating-point number is an inclusive limit, a list of a floating-point number is an exclusive limit, and`*`means that a limit does not exist and so effectively denotes minus or plus infinity, respectively.In a similar manner, one may use:

(short-float

*low**high*)

(single-float*low**high*)

(double-float*low**high*)

(long-float*low**high*)In this case, if a limit is a floating-point number (or a list of one), it must be one of the appropriate format.

X3J13 voted in March 1989 (REAL-NUMBER-TYPE) to add a list form of the `real`
type specifier to denote an interval of `real` numbers.

`(real`*low**high*)-
Denotes the real numbers between
*low*and*high*. The limits*low*and*high*must each be a real, a list of a real, or unspecified. A real is an inclusive limit, a list of a real is an exclusive limit, and`*`means that a limit does not exist and so effectively denotes minus or plus infinity, respectively.

`(string`*size*)-
Means the same as
`(array string-char (`: the set of strings of the indicated size.*size*)) `(simple-string`*size*)-
Means the same
as
`(simple-array string-char (`: the set of simple strings of the indicated size.*size*))

X3J13 voted in March 1989 (CHARACTER-PROPOSAL)
to eliminate the type `string-char` and to redefine the type
`string` to be the union of one or more specialized vector
types, the types of whose elements are subtypes of the type `character`.
Similarly, the type
`simple-string` is redefined to be the union of one or more specialized
simple vector
types, the types of whose elements are subtypes of the type `character`.

`(base-string`*size*)-
Means the same as
`(vector base-character`: the set of base strings of the indicated size.*size*) `(simple-base-string`*size*)-
Means the same
as
`(simple-array base-character (`: the set of simple base strings of the indicated size.*size*))

`(bit-vector`*size*)-
Means the same as
`(array bit (`: the set of bit-vectors of the indicated size.*size*)) `(simple-bit-vector`*size*)-
This means the same as
`(simple-array bit (`: the set of bit-vectors of the indicated size.*size*))

[email protected]