complex returns a number
whose real part is realpart
and whose imaginary part is imagpart.
If realpart is a rational
and imagpart is the rational number zero,
the result of complex is realpart, a rational.
Otherwise, the result is a complex.
If either realpart or imagpart is a float,
the non-float is converted to a float
before the complex is created.
If imagpart is not supplied, the imaginary part is a
zero of the same type as realpart; i.e.,
(coerce 0 (type-of realpart)) is
effectively used.
Type upgrading implies a movement upwards in the type
hierarchy lattice.
In the case of complexes, the type-specifier
must be a subtype of
(upgraded-complex-part-type type-specifier).
If type-specifier1 is a subtype of type-specifier2, then
(upgraded-complex-element-type 'type-specifier1)
must also be a subtype of
(upgraded-complex-element-type 'type-specifier2).
Two disjoint types can be upgraded into
the same thing.