[ Non-logical Variables, Arrays, Bags, Shelves and Stores | Reference Manual | Alphabetic Index ]

store_remove(+StoreHandle, ++Key, -Value)

Get and delete an entry from a store object
StoreHandle
A store handle or store name
Key
A ground term
Value
A variable or arbitrary term

Description

This looks up an entry under a given key in a given store object. If no entry for this key exists, the predicate fails. Otherwise, the old value is unified with Value, and the store entry deleted.

The key can be arbitrarily complex, but must be a ground term. The value can be an arbitrary term, and may contain uninstantiated variables. Note that values are copied when being stored or retrieved, therefore a retrieved nonground value will contain fresh variables rather than the original ones (this is similar to the behaviour of bags, shelves and global variables).

The complexity of the retrieval operation is linear in both the size of the key and the value, since the value is being copied and the key needs to be compared. For indexing purposes, a hash value is computed from the key, and the full depth of the key is taken into account.

Note: If StoreHandle is not a handle, then it must be an atom or a compound term, and the store is identified by this term's toplevel functor together with the context module.

Modes and Determinism

Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

Fail Conditions

The store does not contain an entry for Key

Exceptions

(4) instantiation fault
StoreHandle is uninstantiated
(4) instantiation fault
Key is not ground
(5) type error
StoreHandle is neither atom nor compound term nor store handle
(45) named object does not exist
StoreHandle is not the name of a store

Examples


    ?- store_create(Handle),
       store_set(Handle, tom, hello(world)),
       store_count(Handle, Count1),
       store_remove(Handle, tom, Value),
       store_count(Handle, Count2).

    Handle = $&(store,"17h3")
    Count1 = 1
    Value = hello(world)
    Count2 = 0
    Yes (0.00s cpu)


    ?- store_create(Handle),
       store_set(Handle, tom, hello(world)),
       store_remove(Handle, harry, Value).

    No (0.00s cpu)
    

See Also

store / 1, store_create / 1, store_contains / 2, store_count / 2, store_delete / 2, store_erase / 1, store_get / 3