From: The Tom
Subject: lucid
Date: 
Message-ID: <12319@jarthur.Claremont.EDU>
I have found a very interesting bug in lucid lisp (maybe I have an old
version (4.0))

(defclass one () ((test :accessor test)))
(defclass two () ())
(defmethod (setf test) (val (inst two))
    (pprint "Success"))
(defclass three (one two) ())
(setq a (make-instance 'three))
(set (test a) 5)

evaluating that on a microexplorer, MCL, or Procyon lisp all cause 
"Success" to printed out.  Not so in lucid, however, if you type
(defmethod (setf test) (val (inst three))
   )
And then evaluate it (in lucid) it does print "Success".  I even tried making
it an after method, with not luck.  How do I contact lucid to let them in on
 this?

Tom Crevier
ExperTelligence, Inc.

P.S. ET's Action! environment is now avaailable in MCL, Procyon, and in
Smalltalk (Digitalk) for the IBm.  Send me mail for info.

From: Richard Shapiro
Subject: Re: lucid
Date: 
Message-ID: <1991Jul18.134450.18398@arris.com>
tcrevier writes:
>
>I have found a very interesting bug in lucid lisp (maybe I have an old
>version (4.0))
>
>(defclass one () ((test :accessor test)))
>(defclass two () ())
>(defmethod (setf test) (val (inst two))
>    (pprint "Success"))
>(defclass three (one two) ())

The class-precedence list of THREE is: (THREE ONE TWO)

Therefore, the primary (setf test) method for instances of class THREE
should be the one inherited from ONE, not from TWO. 

>(setq a (make-instance 'three))
>(setf (test a) 5)
>
>evaluating that on a microexplorer, MCL, or Procyon lisp all cause 
>"Success" to printed out.

These are wrong. See above.

>  Not so in lucid,

Which is correct.

> however, if you type
>(defmethod (setf test) (val (inst three))
>   )
>And then evaluate it (in lucid) it does print "Success".

In this case, you have a new primary method which is a no-op.  Nothing
should happen when you evaluate (setf (test a) 5). I just tried this
in Lucid (4.0.2), and this is exactly what happened (ie, nothing).
From: John Carroll
Subject: Re: lucid
Date: 
Message-ID: <1991Jul19.111032.615@cl.cam.ac.uk>
In article <······················@arris.com> ········@arris.com (Richard Shapiro) writes:
>tcrevier writes:
>>
>>I have found a very interesting bug in lucid lisp (maybe I have an old
>>version (4.0))
>>
>>(defclass one () ((test :accessor test)))
>>(defclass two () ())
>>(defmethod (setf test) (val (inst two))
>>    (pprint "Success"))
>>(defclass three (one two) ())
>
>The class-precedence list of THREE is: (THREE ONE TWO)
>
>Therefore, the primary (setf test) method for instances of class THREE
>should be the one inherited from ONE, not from TWO. 
>
>>(setq a (make-instance 'three))
>>(setf (test a) 5)
>>
>>evaluating that on a microexplorer, MCL, or Procyon lisp all cause 
>>"Success" to printed out.
>
>These are wrong. See above.

I tried this in the only CLOS version of Procyon CL I know of (2.1.4),
and the call to (setf test) returns 5 and DOES NOT print "Success".
The behaviour thus agrees with that of Lucid.

John Carroll
(···@cl.cam.ac.uk)