[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Date: Wed, 23 Jul 1986 09:50 EDT
From: Rob MacLachlan <RAM@C.CS.CMU.EDU>
Well, I think everyone is wrong about this one. (THE (VALUES ...) ...)
specifies the functional type of the continuation. This is in effect
what CLTL already says: "...indicates the parameter list of a function
that, when given to multiple-value-call along with the values, would
be suitable for receiving those values."
I strongly disagree with any proposal which gives THE mandatory
run-time semantics. THE is a declaration --- its presence should not
change the meaning of a correct program. If the form returns too many
values, then the program is in error and the result is undefined.
I agree that it is highly desirable to be able to specify the
type of the first value without worrying about the actual number of
values. To this end, I propose that (THE FOO ...) should be
synonomous with the (THE (VALUES FOO &REST T) ...). This allows one
to say things like (THE FIXNUM (TRUNCATE ...)).
OK, I can buy that. I still want a form for run-time semantics for the
purposes of multiple-value-call and multiple-value-list. Something like
where <something> is not evaluated and can be either a non-negative integer
which is the number of values, or a list of type specifiers. (An
integer is shorthand for (t t ...).) The take-values form returns
exactly the number of specified values, by truncating or padding the
values returned by <form> as necessary. This can be naively implemented
as a macro given what is currently in CLtL, but I think it is useful
enough for some compilers to take advantage of it that it should be
considered part of the language.
It should also be clarified that the VALUES type specifier may
- THE VALUES
- From: Rob MacLachlan <RAM@C.CS.CMU.EDU>