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
Type upgrading implies a movement upwards in the type
In the case of complexes, the type-specifier
must be a subtype of
If type-specifier1 is a subtype of type-specifier2, then
must also be a subtype of
Two disjoint types can be upgraded into
the same thing.