[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
list type cleanup
- To: cl-cleanup@sail.stanford.edu
- Subject: list type cleanup
- From: Michael J. Beckerle <BECKERLE@XX.LCS.MIT.EDU>
- Date: Wed 31 Aug 88 15:25:52-EDT
- Cc: beckerle@XX.LCS.MIT.EDU
Issue: LIST-TYPE-SPECIFIER
References: CLtL, pg 26, 27, 43.
Category: Compatible Change
Edit History: v0 28june88 mike beckerle
Problem Description:
There is a need in common lisp for more accurate type specifiers
for lists. In particular, there is no way to express
the type of a list having particular element types.
Resolving this issue will help resolve FUNCTION-TYPE-REST-LIST-ELEMENT.
Proposal: LIST-TYPE-EXTENDED
(1) The LIST type specifier would be extended to allow
specification of arguments. e.g.,
(typep x 'list) => unchanged from current meaning
(typep x '(list <subtype>)) == (and (typep x 'list)
(typep (car x) <subtype>))
(typep x '(list <s1> <s2> ... <sN>)) ==
(and (typep x 'list)
(typep (car x) <s1>)
(typep (cadr x) <s2>)
...
(typep (car (last x)) <sN>))
Hence, the LIST type specifier is extended to allow specification of the
types of the arguments.
(2) A new type specifier is added: LIST-OF.
(typep x 'LIST-OF) = error.
(typep x '(list-of <elttype>)) == (and (typep x 'list)
(dolist (elem x T)
(unless (typep x <elttype>)
(return nil))))
Discussion:
The addition of these type specifiers allows resolution of the
FUNCTION-TYPE-REST-LIST-ELEMENT proposal in a way which will allow
type-specifiers to still be highly specific about the types of
elements passed in &rest arguments.
In particular, (function (&rest (list-of number)) number), can be
distinguished from (function (&rest (list complex fixnum bignum))
number).
-------