[mercury-users] destructive update?
    Mark Brown 
    mark at csse.unimelb.edu.au
       
    Tue Jul 10 04:07:51 AEST 2007
    
    
  
On 09-Jul-2007, Barney Fisher <barney.fisher at googlemail.com> wrote:
> Assuming that destructive update is a must, how should I approach
> implementing destructive update on terms of a Mercury type? via the
> foreign language interface?
It is difficult to access Mercury types from foreign code in a portable
way, so I wouldn't recommend this approach.  A portable way is to use
the store module:
update_node_arg(Node0, ArgNum, NewVal, Node) :-
	some [!S] (
		store.new(!:S),
		store.new_ref(Node0, Ref, !S),
		store.arg_ref(Ref, ArgNum, ArgRef, !S),
		store.set_ref_value(ArgRef, NewVal, !S),
		store.extract_ref_value(!.S, Ref, Node)
	).
Node is Node0 with the ArgNum'th argument replaced by NewVal.
Operationally, Node occupies the same location that Node0 had (note that
Node0's mode is `di').
Cheers,
Mark.
--------------------------------------------------------------------------
mercury-users mailing list
Post messages to:       mercury-users at csse.unimelb.edu.au
Administrative Queries: owner-mercury-users at csse.unimelb.edu.au
Subscriptions:          mercury-users-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
    
    
More information about the users
mailing list