[elephant-devel] associations between instances of the same class
Ian Eslick
eslick at media.mit.edu
Tue Jul 22 12:17:21 UTC 2008
Sorry everyone, I'm not going to be able to get to this until at least
Friday and probably not until next week.
The association mechanism isn't that big and is mostly built on top of
the core elephant other than some metaclass support. If someone wants
to look into it - the associations.lisp file and the metaclass.lisp
files have all you'd need to figure out what is going on.
Associations simply create and manage indices. The only magic is
intercepting slot reads/writes and updating the indices
appropriately. I don't doubt that there is likely to be corner cases
the code doesn't yet handle. A second (or third or fourth) pair of
eyes is likely to be very helpful here.
Ian
On Jul 22, 2008, at 6:00 AM, LukasGiessmann wrote:
> hi,
>
> i also tried to make a simple example of this situation and after a
> while
> i noticed the following behavior of the class A:
>
> ---
> (defpclass A()
> ((id :initarg :id :accessor id-of :index t)
> (points-to :accessor points-to :associate (A pointed-by) :many-to-
> many t)
> (pointed-by :accessor pointed-by :associate (A points-to) :many-to-
> many
> t)))
> ---
>
> the association index of the slots points-to and pointed-by is the
> same.
> so i redefined the class:
>
> ---
> (defpclass A()
> ((id :initarg :id :accessor id-of :index t)
> (points-to :accessor points-to :associate (A points-to) :many-to-
> many t)
> (pointed-by :accessor pointed-by :associate (AnotherClass points-to)
> :many-to-many t)))
> ---
>
> afterwards i made 2 instances of the new definition and checked the
> indices and they were not equal.
>
> finally i defined the original class A and made the directed
> associations,
> it worked.
>
> there's also the original file attached, with the exact program
> sequence.
>
>
> regards
>
> lukas
>
>
>
>> Hi,
>>
>> we came across a (to us) surprising behavior of the association
>> code in
>> elephant-unstable: If we generate associations between instances of
>> the
>> same
>> class, then elephant forces these associations to be symmetric.
>> That means
>> we
>> cannot use association slots to implement directed graphs.
>>
>> For example, the attached program is supposed to set up a
>> "diamond"; We'd
>> therefore expect the following output:
>>
>> Node A:
>> successors: (B C)
>> predecessors: ()
>> Node B:
>> successors: (D)
>> predecessors: (A)
>> Node C:
>> successors: (D)
>> predecessors: (A)
>> Node D:
>> successors: ()
>> predecessors: (B C)
>>
>> However, elephant makes both the successor and the predecessor slot
>> hold
>> always the same references:
>>
>> Node A:
>> successors: (B C)
>> predecessors: (B C)
>> Node B:
>> successors: (A D)
>> predecessors: (A D)
>> Node C:
>> successors: (A D)
>> predecessors: (A D)
>> Node D:
>> successors: (B C)
>> predecessors: (B C)
>>
>> Is this by design or is this a bug? Or did we simply use the
>> association
>> API
>> incorrectly?
>>
>> Regards
>>
>> Christoph
>>
>> --
>> FH Worms - University of Applied Sciences
>> Fachbereich Informatik / Telekommunikation
>> Erenburgerstr. 19, 67549 Worms, Germany
>> _______________________________________________
>> elephant-devel site list
>> elephant-devel at common-lisp.net
>> http://common-lisp.net/mailman/listinfo/elephant-devel
> <
> directed_graph_works
> .lisp>_______________________________________________
> elephant-devel site list
> elephant-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/elephant-devel
More information about the elephant-devel
mailing list