bb_update(:Key, -OldTerm, +NewTerm)
If a term is currently stored under Key and unifies
with OldTerm, the term is replaced by a copy of
bb_update/3 silently fails. This
predicate provides an atomic swap operation.
atomic, must be nonvar
Any uninstantiated variables in the NewTerm will be replaced by new private variables, along with copies of any subgoals blocked on these variables (see ref-sem-sec).
Key is not instantiated
Key is not an atom or a small integer.