[m-dev.] proposal for promise_pure scope warning

Peter Schachte schachte at csse.unimelb.edu.au
Tue Apr 15 18:06:12 AEST 2008

Ian MacLarty wrote:
> Do you mean something like the following:
> cached_computation(In, Out) :-
>     ( semipure lookup_value_in_cache(In, Cached) ->
>         Out = Cached
>     ;
>         preform_computation(In, Out),
>         impure cache_result(In, Out)
>     ).


> Here the promise_pure must go around the whole body.  If you put the
> promise_pure around the calls to lookup_value_in_cache and cache_result,
> then the call to cache_result could get optimised away.

Ah, yes, you're right.  As long as the impure pred is det (or cc_multi) and 
has no outputs, which it usually would in the sort of example I was thinking of.

What about semipure goals?  They'll usually to have outputs and so couldn't 
be optimised away.  If you remove the impure goal from your example above 
(assuming some other code updated the cache at times), you'd be justified 
wrapping a promise_pure around the lookup goal alone, since the code does the 
right thing no matter in what order the lookup and update are executed.

Peter Schachte              It is the function of the citizen to keep the
schachte at cs.mu.OZ.AU        Government from falling into error.
www.cs.mu.oz.au/~schachte/      -- Robert H. Jackson
Phone: +61 3 8344 1338
mercury-developers mailing list
Post messages to:       mercury-developers at csse.unimelb.edu.au
Administrative Queries: owner-mercury-developers at csse.unimelb.edu.au
Subscriptions:          mercury-developers-request at csse.unimelb.edu.au

More information about the developers mailing list