[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Question about declaration
- To: common-lisp@SAIL.STANFORD.EDU
- Subject: Re: Question about declaration
- From: NGALL@G.BBN.COM
- Date: Fri, 11 Dec 1987 15:01:00 -0000
- In-reply-to: <8712111027.AA00767@jabbah.cs.rochester.edu>
- Sender: NGALL@G.BBN.COM
Date: Fri, 11 Dec 87 05:27:16 -0500
I suspect I would write something as uninformative as
(proclaim '(function foo (list) (values &rest list)))
which is marginally better than no declaration at all.
While at this, how do you use the &-markers in a `values' specifier?
For instance, the only things I believe make sense after &rest in a
`values' specifier should be `null' (utterly useless) or `list'
(quite uninformative). Anything more general than `list' would
admit of impossible trash, anything disjoint with list is
unspeakable. Yet, KCL just let me try `...&rest float'. Better not
think what a compiler could do with such.
I think the type specifier for the function FOO is supposed to be
(PROCLAIM '(FUNCTION FOO (LIST) (VALUES &REST T))
This is because the type specifier following &REST is supposed to declare
the type of all the remaining arguments/values. You won't find this in CLtL,
but I have it marked in my copy as a proposed clarification in Guy Steele's
If this is NOT the behavior of &REST, then all &REST could tell a
compiler/programmer is that this function can take/return any number
of arguments (depending on where &REST is used).