SUBTYPEP confusion re. OR of SATISFIES of not-yet-defined predicate
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
SBCL |
Fix Released
|
Medium
|
Unassigned |
Bug Description
As reported by Levente M\'{e}sz\'{a}ros sbcl-devel 2006-02-20,
(aver (equal (multiple-
fails. Also, beneath that failure lurks another failure,
(aver (equal (multiple-
Having looked at this for an hour or so in sbcl-1.0.2, and
specifically having looked at the output from
laptop$ sbcl
* (let ((x 'string)
(y '(or (satisfies x) integer)))
(trace sb-kernel:
(subtypep x y))
my (WHN) impression is that the problem is that the semantics of TYPE=
are wrong for what the UNION-COMPLEX-
to use it for. The comments on the definition of TYPE= probably
date back to CMU CL and seem to define it as a confusing thing:
its primary value is something like "certainly equal," and its
secondary value is something like "certain about that certainty."
I'm left uncertain how to fix UNION-COMPLEX-
reducing its generality by removing the TYPE= cleverness. Possibly
the tempting TYPE/= relative defined next to it might be a
suitable replacement for the purpose. Probably, though, it would
be best to start by reverse engineering exactly what TYPE= and
TYPE/= do, and writing an explanation which is so clear that one
can see immediately what it's supposed to mean in odd cases like
(TYPE= '(SATISFIES X) 'INTEGER) when X isn't defined yet.
Changed in sbcl: | |
importance: | Undecided → Medium |
status: | New → Confirmed |
Changed in sbcl: | |
status: | Confirmed → Fix Released |