[ 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
- hash_update(+, ++, -, +, +) is det
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