The following predicates are provided solely for compatibility with other Prolog systems. Their semantics can be understood by imagining that they are defined by the following clauses:
recorda(Key, Term, Ref) :-
functor(Key, Name, Arity),
functor(F, Name, Arity),
asserta('$recorded'(F,Term), Ref).
recordz(Key, Term, Ref) :-
functor(Key, Name, Arity),
functor(F, Name, Arity),
assertz('$recorded'(F,Term), Ref).
recorded(Key, Term, Ref) :-
functor(Key, Name, Arity),
functor(F, Name, Arity),
clause('$recorded'(F,Term), _, Ref).
The reason for the calls to functor/3 in the above definition is
that only the principal functor of the key is significant. If
Key is a compound term, its arguments are ignored.
Please note: Equivalent functionality and performance, with reduced memory costs, can usually be had through normal dynamic procedures and indexing (see ref-mdb-bas and Indexing).
recorda(Key, Term, Ref)
records the Term in the internal database as the first item
for the key Key; a database reference to the newly-recorded term
is returned in Ref.
recordz(Key, Term, Ref) is like
recorda/3 except that it records the term as the last item in the
internal database.
recorded(Key, Term, Ref) searches
the internal database for a term recorded under the key
Key that unifies with Term, and whose database reference
unifies with Ref.
current_key(KeyName, KeyTerm) succeeds when
KeyName is the atom or integer that is the name of
KeyTerm. KeyTerm is an integer, atom, or compound term
that is the key for a currently recorded term.