[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Multiple EQL specializers bug
- To: CommonLoops.PA@Xerox.COM
- Subject: Multiple EQL specializers bug
- From: Martin Boyer <gamin@Moe.McRCIM.McGill.EDU>
- Date: Thu, 9 Nov 89 19:06:37 EST
- Redistributed: CommonLoops.PA
In
PCL system date: 5/22/89 Victoria Day PCL
Lisp Implementation type: Lucid Common Lisp
Lisp Implementation version: 3.0.2
*features*: (:PORTABLE-COMMONLOOPS :PCL :COMMON-LISP :LUCID :UNIX :SUN
:MC68000 :IEEE-FLOATING-POINT :LCL3.0 :LOOP :EGC :COMPILER)
there appears to be a bug when multiple EQL specializers are used; if
there is a method with more than 1 EQL specializers, then the other
methods (for the same generic function) with less EQL specializers
can't be found.
Try the following program:
(defclass class-1
()
(slot1)
)
(defmethod hello1 ((object class-1) (arg1 (eql 'a)))
(format t "Hello1 from (class-1 'a)~%")
)
(defmethod hello1 ((object class-1) arg1)
(format t "Hello1 from (class-1 T)~%")
)
(defmethod hello2 ((object class-1) (arg1 (eql 'a)) (arg2 (eql 'b)))
(format t "Hello2 from (class-1 'a 'b)~%")
)
(defmethod hello2 ((object class-1) (arg1 (eql 'a)) arg2)
(format t "Hello2 from (class-1 'a T)~%")
)
(setq o1 (make-instance 'class-1))
(hello1 o1 'a)
(hello1 o1 'c)
(hello2 o1 'a 'b)
(hello2 o1 'a 'c)
You will find that the last line fails.
I tried changing the order of evaluation, e.g. calling (hello2 o1 'a 'c)
before defining the method specialized on 'b and it works
Hence my conclusion; as soon as a second EQL specializer is used, the
non-specialized method goes poof!
Or am I doing something forbidden?
Martin
--
Martin Boyer
McGill Research Centre for Intelligent Machines
McGill University, Montreal, QC
gamin@larry.mcrcim.mcgill.edu
gamin@mcgill-vision.uucp