[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(SYMBOL? #t) ==> ?
Date: Fri, 11 Mar 88 12:31:28 PST
From: andy%hobbes at ads.com (Andy Cromarty)
This suggests that if v is a vector and p a pair, then (VECTOR? v) and
(PAIR? p) should be true, but (VECTOR? p) and (PAIR? v) should be
undefined in the Report (i.e. considered to be implementation-dependent).
I knew this topic would spark a lively debate.
As I understand your message, you are saying that a Scheme
implementation in which, say, ALL type predicates returned #T ALWAYS,
would be a correct one. For example, it could be the case that (symbol?
'(a b)) => #t and (pair? 'a) => #t. (I guess it would also have to have
no type errors, but that's a detail.) It seems to me that this makes
the type predicates nearly useless. In that case, they should be
eliminated from the language, making Scheme more like ML (and C and
FORTRAN and ...). Then to make up for this absence, we should have
strong typing.
I think this would break a lot of programs and annoy many users.
I am not an opponent of subtyping or of abstract data types. I
certainly don't want to promote a notion of "the type of" an object,
since an object can have many types. All I am suggesting is that we
specify some set of circumstances in which the type predicates will
return false. We all make some assumptions implicitly now; I just want
the report to codify existing practice. Language like that in CLtL
would be fine -- take a look at it, you'll notice that some things are
left unspecified -- but I would hope for something a little tighter.