Instead of using a ref, you might consider using a closure, which
seems a little more functional.

So every child would simply store a function that when called would
return the map of the parent, map you capture using a closure.  This
would also reduce your printing problems because functions just print
their classname, and you would know that the function brings you back
to the parent.

I did this for a Neo4j wrapper I wrote to idiomatically represent
traversing webs and trees.

Would that help anyway?  Then you wouldn't have to worry about messing
with redefining prints or using alters.  The thunk would be created as
part of the process.

Mark

On Oct 13, 4:21 pm, andrei <andrei.zhabin...@gmail.com> wrote:
> That works, thanks!
>
> Yeah, I understand that it is not the best data structure to use. The
> task is to create a tree, and it is needed to get all children and all
> parents of specified node in this tree in a constant time. So, I
> cannot see another way to do it except storing refs both from parents
> to children and from children to parents.
>
> On Oct 14, 12:40 am, Laurent PETIT <laurent.pe...@gmail.com> wrote:
>
>
>
> > You can add a :type metadata to your maps, and this can be catched by the
> > (type) method of multimethods.
>
> > But if you have parent -> child -> parent -> child ... relationships, I
> > guess that you're building a tree made of mixins of maps and refs to maps
> > ... and indeed this should bell some rings in your head if you haven't
> > already carefully balanced alternative choices ...
>
> > 2010/10/13 andrei <andrei.zhabin...@gmail.com>
>
> > > How can I override print-method for a map, defined with defstruct?
>
> > > I have to create object hierarchy: one map is a parent for another,
> > > i.e. it holds link to a child, and another is a child for the first
> > > one, i.e. holds link to a parent. When I try to print it, I get
> > > StackOverflowError since printer tries recursively print objects:
>
> > >  parent -> child -> parent -> child -> ....
>
> > > The best solution I see is to override print-method or str, so the
> > > printing will go normally. I found this topic:
>
> > >http://groups.google.com/group/clojure/browse_thread/thread/4a675222f...
>
> > > which shows how to override print-method for objects defined by
> > > deftype, but is there a way to do same trick for maps? Maybe it is
> > > possible to add some special tag to object's meta? Or to redefine
> > > print-method in the only namespace?
>
> > > Or maybe I'm just looking at the wrong direction?
>
> > > --
> > > You received this message because you are subscribed to the Google
> > > Groups "Clojure" group.
> > > To post to this group, send email to clojure@googlegroups.com
> > > Note that posts from new members are moderated - please be patient with
> > > your first post.
> > > To unsubscribe from this group, send email to
> > > clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com
> > >  >
> > > For more options, visit this group at
> > >http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to