[ library(hash) | Reference Manual | Alphabetic Index ]

hash_update(+Table, ++Key, -OldValue, +NewValue, +InitValue)

Lookup and replace the value stored under Key, or initialise it
Table
A hash table
Key
a ground term
OldValue
Any term
NewValue
Any term
InitValue
Any term

Description

Lookup the old value stored under Key (defaulting to InitValue if none), and store NewValue in its place. Behaves like
        hash_update(Table, Key, Old, New, Init) :-
                ( hash_get(Table, Key, Old) ->
                    hash_set(Table, Key, New)
                 ;
                    Old = Init,
                    hash_set(Table, Key, New)
                ).
Note that OldValue can be used to construct NewValue, see examples.

Modes and Determinism

Examples

	?- hash_create(H),
	   hash_update(H, k, A, hello, first),
	   hash_update(H, k, B, world, first),
	   hash_get(H, k, C).

        A = first
        B = hello
        C = world
	Yes (0.00s cpu)

	% Example: increment a numerical table entry, initialising with 0
    	hash_inc(H, Key) :-
	    hash_update(H, Key, N0, N1, 0),
	    N1 is N0+1.

	% Example: add element to a list entry, starting with []
    	hash_prepend(H, Key, Value) :-
	    hash_update(H, Key, Values, [Value|Values], []).
    

See Also

hash_get / 3, hash_set / 3, hash_update / 4, hash_map / 3