On Thu, Jan 8, 2009 at 1:28 AM, minh thu <span dir="ltr">&lt;<a href="mailto:noteed@gmail.com">noteed@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br>
<br>
I&#39;d like to process some kind of graph data structure,<br>
say something like<br>
<br>
data DS = A [DS] | B DS DS | C.<br>
<br>
but I want to be able to discover any sharing.<br>
Thus, in<br>
<br>
b = B a a where a = A [C],<br>
<br>
if I want to malloc a similar data structure,<br>
I have to handle to the node representing B<br>
two times the same pointer (the one returned<br>
after allocating A [C]).<br>
<br>
To discover sharing, I thought it would be<br>
necessary to give unique name to node and<br>
then compare them while traversing the graph.<br>
I could give the name by hand but it would be<br>
cumbersome. But at least it would not require<br>
any monad for the bookkeeping of ungiven<br>
names. Is it possible to give those names<br>
automatically but outside any monad ?</blockquote><div><br>If your graphs are acyclic, then you can label each node with a hash and use that for comparison.&nbsp; This usually works very well in practice.<br><br>Luke<br> </div>
</div>