[closer-devel] Re: [Ecls-list] Closer to MOP for ecl

Pascal Costanza pc at p-cos.net
Thu May 11 11:40:01 UTC 2006


On 11 May 2006, at 20:15, Gary King wrote:

> I'm not sure what to do. Some Lisps (such as OpenMCL and SBCL)  
> define eql-specializer as a class. Others (such as LispWorks) do  
> not (AFAICT). Also, I don't see eql-specializer-p being exported or  
> defined in Closer to MOP. It's used in ECL and LispWorks but not  
> defined. I think what I want is
>
>> (defgeneric eql-specializer-p (thing)
>>   (:documentation "If thing is an eql-specializer, returns a  
>> representation of thing as \(eql <object>\).")
>>   #-(or lispworks ecl)
>>   (:method ((thing eql-specializer))
>>            (list 'eql (eql-specializer-object thing)))
>>   (:method ((thing t))
>>            #-(or lispworks ecl)
>>            (values nil)
>>            #+(or lispworks ecl)
>>            (typep obj 'eql-specializer))
>>   #+digitool
>>   (:method ((thing cons))
>>            ;; don't ask, don't tell
>>            thing))
>
> comments?

The "correct" way is to implement eql specializers as a class, so  
there would be no need to implement eql-specializer-p because (typep  
thing 'eql-specializer) should already do what you want.

LispWorks and ecl are the only implementations that implement eql  
specializers as lists (wich, btw, better complies with ANSI Common  
Lisp, but that's another story). LispWorks provides eql-specializer- 
p, which I just use in Closer to MOP. In ecl, I have defined it  
internall, but haven't exported it.

I don't want to implement eql-specializer as a class in Closer to MOP  
because I fear this would lead to unexpected behavior and hard-to- 
find bugs. Imagine someone writes a method like this:

(defmethod foo ((thing eql-specializer)) ...)

Since eql specializers are actually lists in LW and ecl, this method  
wouldn't work. So I prefer my current solution, where defining this  
method already issues an error.

I could indeed provide eql-specializer-p across all CL  
implementations if this helps. That's what you're telling me, if I  
understand correctly, right?


Pascal

> On May 11, 2006, at 4:53 AM, Pascal Costanza wrote:
>
>> I have used the type definition for eql-specializer already in  
>> other CLOS MOP implementations, so Moptilities probably already  
>> has the conditionalization that would only be needed to be  
>> switched on for ecl. (But I am just guessing.) Maybe ask Gary King  
>> about this.
>
>
> -- 
> Gary Warren King
> metabang.com
> http://www.metabang.com/
> (413) 210 7511
> gwking on #lisp (occasionally)
>
>

-- 
Pascal Costanza, mailto:pc at p-cos.net, http://p-cos.net
Vrije Universiteit Brussel, Programming Technology Lab
Pleinlaan 2, B-1050 Brussel, Belgium








More information about the ecl-devel mailing list