BOUNCE mercury-users at cs.mu.OZ.AU: Non-member submission from [Don Smith <dsmith at rsn.cirl.uoregon.edu>]
Thomas Charles CONWAY
conway at cs.mu.oz.au
Tue Oct 21 08:12:36 AEST 1997
In mercury-users at cs.mu.OZ.AU, Don writes:
>
> I am writing a Prolog application which builds a graph structure level
> by level. To extend the (ground) graph to a new level the program calls
> setof/3 to collect solutions, each of which references the graph from
> earlier levels. When I run the program under sicstus 2.1, eclipse 3.5.2,
> or BinProlog 5.0, it uses way too much memory. The problem seems to be
> that setof/3 copies terms in each solution, so each time a new solution
> is collected the entire existing graph is copied, even though the graph
> is ground and could in fact be shared.
>
> I need a Prolog which will be smart enough to (let me specify that it's OK
> to) copy only the new part of each solution. Do you think Mercury might
> do this, thanks to its use of mode info? Will any standard Prologs let
> me do this?
>
If you are using the Bohem conservative garbage collector (the default)
then the all-solutions predicates do no copying at all (and there is
no heap-reclaimation on failure). If you are using no collection,
then only the new parts of your solution get copied.
BTW, from your description what you are building is a DAG rather
than a general graph. Mercury can't directly represent a general
graph (which requires rational terms rather than regular terms).
We do, however, have library functionality for building graphs
as abstract data types.
Thomas
--
ZZ:wq!
^X^C
Thomas Conway conway at cs.mu.oz.au
AD DEUM ET VINUM Every sword has two edges.
More information about the users
mailing list