<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
  <title></title>
</head>
<body alink="#ee0000" bgcolor="#ffffff" link="#0000ee" text="#ffffff"
 vlink="#551a8b">
<font color="#000066">I'm currently converting the object system called
Meroonet used in Christian Queinnec</font><font color="#000066">'s
"Lisp In Small Pieces" to Swindle CLOS.  Everything was proceeding more
or less smoothly until I ran up against a fundamental difference in the
way ancestor field accessors are treated by the two systems.  Meroonet
takes the position that a class B derived from class A inherits the
accessors from class A. Where as Swindle CLOS does not. This means,
that in Swindle, for a class B object to access the slots inherited
from class A it needs to call them using class A’s accessors. For
example in Meroonet it is legal to say:<br>
<br>
<u><b>Meroonet</b></u><br>
(define class Point Object (x y))<br>
(define class ColoredPoint Point (color))<br>
(define thePoint (make-ColoredPoint :x 3 :y 44 :color ‘white))<br>
(set-ColoredPoint-x! thePoint 5)<br>
(set-ColoredPoint-y! thePoint 6)<br>
(set-ColoredPoint-color! thePoint ‘black)<br>
(printf “~n=&gt;~a ~a ~a” (ColoredPoint-x thePoint) (ColoredPoint-y
thePoint)<br>
(ColoredPoint-color thePoint))<br>
=&gt;5 6 black<br>
<br>
Note: no Point accessors were required to manipulate the inherited
fields, `x’ and `y’<br>
from within the ColoredPoint class. ColoredPoint has accessors of its
own for these<br>
fields.<br>
<br>
Whereas in Swindle it needs to written as:<br>
<u><b>Swindle CLOS<br>
</b></u>(defclass Point (Object) x y :auto #t :print #t)<br>
(defclass ColoredPoint (Point) color :auto #t :print #t)<br>
(define thePoint (make-ColoredPoint :x 3 :y 44 :color ‘white))<br>
(set-Point-x! thePoint 5)<br>
(set-Point-y! thePoint 6)<br>
(set-aColoredPoint-color! thePoint ‘black)<br>
(printf “~n=&gt;~a ~a ~a” (Point-x thePoint) (Point-y thePoint)
(ColoredPoint-color<br>
thePoint))<br>
=&gt;5 6 black<br>
<br>
It is not a big deal to add, by hand coding accessors for the ancestor
fields to the derived class.  I've tried it and it works fine. 
However, to create a true port of Meroonet, where everything is done
with macros I run into the problems of the scope of these added
methods.  The reason is that I necessarily have to walk a list of the
ancestors and for each a list of slots and then create a pair of
accessor methods for the derived
class.  I've yet to figure out how to succeed in walking through this
list of ancestors and slots without ultimately ending definition
context when not at top-level, or being forced off
top-level, where the class was defined.  And so I end up with a class
that has top-level scope and accessor methods with some form of local
scope.<br>
<br>
So my question is, am I overlooking some parameter setting of Swindle
CLOS which would have it behave in the manner of Meroonet regarding
ancestor accessors?  If not, does someone have a germ of an idea on how
to execute defmethod statements programmatically without either ending
definition context or being forced off top-level, without
resorting to writing the s-expressions out to a file and loading them
in?<br>
</font>
<pre class="moz-signature" cols="72"><font color="#000066">Thanks,

--kyle

Kyle Smith
airfoil at bellsouth dot net
schemekeys.blogspot.com</font>schemekeys.blogspot.com
</pre>
</body>
</html>