[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Shared slots, and the generality of WITH-ACCESSORS
- To: commonloops.pa@Xerox.COM
- Subject: Shared slots, and the generality of WITH-ACCESSORS
- From: lgm@ihlpf.att.com
- Date: Wed, 21 Mar 90 17:40 CST
- >from: ihlpf!lgm (Lawrence G Mayka +1 708 713 5166)
- Redistributed: commonloops.pa
I have a couple more questions/suggestions with regard to CLOS
that I'd appreciate comments on.
Is there any clear way to refer to a shared slot of a class even
if an instance of the class is not available, indeed perhaps
before any instance of that class has been made? The standard
referencing mechanism is SLOT-VALUE, but it requires an instance.
I've heard that the class prototype (if the meta-object protocol
specifies it) can access a shared slot, but does even the class
prototype exist if no actual instance of the class has been made?
It seems that the canonical semantic definition of WITH-ACCESSORS
(via SYMBOL-MACROLET) would accommodate not only a standard class'
slot accessors, but also any monadic function FUNC having a
corresponding (SETF FUNC) function; or even any monadic form FORM
having some corresponding SETF form. (Of course, the new rules
for SETF guarantee that *every* form FORM has a corresponding SETF
form; the default is (SETF FORM).) This use of WITH-ACCESSORS
would be a useful shorthand, at least for instances of DEFSTRUCT
and in fact for any composite data structure, all the way down to
a CONS. WITH-ACCESSORS is then no longer CLOS-specific at all,
except for compiler optimizations. For example:
(WITH-ACCESSORS ((CAR CAR) (CDR CDR)) CONS
(SETF CAR 1)
(SETF CDR 2)
)
effectively alters the CAR and CDR of CONS to be 1 and 2,
respectively. Of course, such usage makes the utility of a
shorthand form of WITH-ACCESSORS (analogous to the short form of
WITH-SLOTS) more obvious. The shorthand would look like:
(WITH-ACCESSORS (CAR CDR) CONS
(SETF CAR 1)
(SETF CDR 2)
)
Is this at all reasonable?
Lawrence G. Mayka
AT&T Bell Laboratories
lgm@ihlpf.att.com
Standard disclaimer.