Next: , Up: Miscellaneous Features   [Contents][Index] Data Types

Type-Spec Argument

Many loop constructs take a ‘type-spec’ argument that allows you to specify certain data types for loop variables. While it is not necessary to specify a data type for any variable, by doing so you ensure that the variable has a correctly typed initial value. The type declaration is made available to the compiler for more efficient loop expansion. In some implementations, ‘fixnum’ and ‘float’ declarations are especially useful; the compiler notices them and emits more efficient code.

Type-Spec Syntax

The ‘type-spec’ argument has the following syntax:

type-spec ::= of-type d-type-spec
d-type-spec ::= type-specifier | (d-type-spec . d-type-spec)

A ‘type-specifier’ in this syntax can be any Common Lisp type specifier.

The ‘d-type-spec’ argument is used for destructuring, as described in section 26.12.2. If the ‘d-type-spec’ argument consists solely of the types ‘fixnum’, ‘float’, ‘t’, or ‘nil’, the of-type keyword is optional. The ‘of-type’ construct is optional in these cases to provide backward compatibility; thus the following two expressions are the same:

;;; This expression uses the old syntax for type specifiers.
(loop for i fixnum upfrom 3 ...)

;;; This expression uses the new syntax for type specifiers.
(loop for i of-type fixnum upfrom 3 ...)