[ Non-logical Variables, Arrays, Bags, Shelves and Stores | Reference Manual | Alphabetic Index ]
store_insert(+StoreHandle, ++Key, ?Value)
Make an entry into a store object, provided none exists yet
- StoreHandle
- A store handle or store name
- Key
- A ground term
- Value
- An arbitrary term
Description
This stores an arbitrary ECLiPSe term under a given key into
the given store object. If an entry for this key already exists,
the predicate fails (to overwrite an existing entry, use store_set/3).
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 store operation is linear in both the size
of the key and the value, since both are being copied. 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
- store_insert(+, ++, ?) is semidet
Modules
This predicate is sensitive to its module context (tool predicate, see @/2).
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_insert(Handle, tom, first).
Handle = $&(store,"17h3")
Yes (0.00s cpu)
?- store_create(Handle),
store_insert(Handle, tom, first),
store_insert(Handle, tom, second). % fails, no overwriting
No (0.00s cpu)
See Also
store / 1, store_create / 1, store_contains / 2, store_count / 2, store_get / 3, store_inc / 2, store_set / 3, store_test_and_set / 4, store_update / 4