Author(s): Daniel Cabeza, Manuel Carro.
Version: 1.5#118 (2000/4/19, 18:13:43 CEST)
Prolog implementations traditionally implement the concept of dynamic predicates: predicates which can be inspected or modified at run-time, adding or deleting individual clauses. The powerfulness of this feature brings also a great disadvantage: as new clause bodies can be arbitrarily added to the program, new unknown predicate calls can arise, thus preventing any global analysis or optimization of the code. But it is the case that most of the time what the programmer wants is simply to store data, with the purpose of sharing it between search branches, predicates, or even execution threads. In Ciao the concept of data predicate serves this purpose: a data predicate is a predicate composed exclusively by facts, which can be inspected, and dynamically added or deleted, at run-time. Using data predicates instead of normal dynamic predicates brings benefits in terms of speed, but above all turns the code automatically analyzable. There is also a special kind of data predicates, called concurrent predicates, which can be used to communicate/synchronize among different execution threads (see section Low-level concurrency/multithreading primitives).
data_facts)data_facts)
asserta_fact(Fact)
Fact is added to the corresponding
data predicate. The fact becomes the first clause of the predicate concerned.
Meta-predicate with arguments: asserta_fact(fact).
Usage 2:
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
asserta_fact(Fact,Ref)
Same as
asserta_fact/1, instantiating Ref to a unique identifier of the asserted fact.
Meta-predicate with arguments: asserta_fact(fact,?).
Usage 2:
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
Ref is a free variable.
(term_typing:var/1)
Ref is a reference of a dynamic or data clause.
(data_facts:reference/1)
assertz_fact(Fact)
Fact is added to the corresponding
data predicate. The fact becomes the last clause of the predicate concerned.
Meta-predicate with arguments: assertz_fact(fact).
Usage 2:
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
assertz_fact(Fact,Ref)
Same as
assertz_fact/1, instantiating Ref to a unique identifier of the asserted fact.
Meta-predicate with arguments: assertz_fact(fact,?).
Usage 2:
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
Ref is a free variable.
(term_typing:var/1)
Ref is a reference of a dynamic or data clause.
(data_facts:reference/1)
current_fact(Fact)
Gives on backtracking all the facts defined as data or concurrent which unify with Fact. It is faster than calling the predicate explicitly, which do invoke the meta-interpreter. If the Fact has been defined as concurrent and has not been
closed,
current_fact/1 will wait (instead of failing) for more clauses to appear after the last clause of Fact is returned.
Meta-predicate with arguments: current_fact(fact).
Usage 2:
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
current_fact(Fact,Ref)
Fact is a fact of a
data predicate and Ref is its reference identifying it uniquely.
Meta-predicate with arguments: current_fact(fact,?).
Usage 1: current_fact(+callable,-(reference))
Fact, instantiating Ref to a unique identifier for each fact.
Usage 2: current_fact(?(callable),+reference)
Ref, unifies Fact with the fact identified by it.
Usage 3:
Fact, instantiating Ref to a unique identifier for each fact.
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
Ref is a free variable.
(term_typing:var/1)
Ref is a reference of a dynamic or data clause.
(data_facts:reference/1)
Usage 4:
Ref, unifies Fact with the fact identified by it.
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
Ref is a reference of a dynamic or data clause.
(data_facts:reference/1)
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
retract_fact(Fact)
Unifies Fact with the first matching fact of a
data predicate, and then erases it. On backtracking successively unifies with and erases new matching facts. If Fact is declared as
concurrent and is non-
closed,
retract_fact/1 will wait for more clauses or for the closing of the predicate after the last matching clause has been removed.
Meta-predicate with arguments: retract_fact(fact).
Usage 2:
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
retractall_fact(Fact)
Erase all the facts of a
data predicate unifying with Fact. Even if all facts are removed, the predicate continues to exist.
Meta-predicate with arguments: retractall_fact(fact).
Usage 2:
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
current_fact_nb(Fact)
Behaves as
current_fact/1 but a fact is never waited on even if it is
concurrent and non-
closed.
Meta-predicate with arguments: current_fact_nb(fact).
Usage 2:
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
retract_fact_nb(Fact)
Behaves as
retract_fact/1, but never waits on a fact, even if it has been declared as
concurrent and is non-
closed.
Meta-predicate with arguments: retract_fact_nb(fact).
Usage 2:
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
close_predicate(Pred)
Changes the behavior of the predicate Pred if it has been declared as a
concurrent predicate: calls to this predicate will fail (instead of wait) if no more clauses of Pred are available.
Meta-predicate with arguments: close_predicate(fact).
Usage 2:
Pred is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
open_predicate(Pred)
Reverts the behavior of
concurrent predicate Pred to waiting instead of failing if no more clauses of Pred are available.
Meta-predicate with arguments: open_predicate(fact).
Usage 2:
Pred is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
set_fact(Fact)
Sets Fact as the unique fact of the corresponding
data predicate.
Meta-predicate with arguments: set_fact(fact).
Usage 2:
Fact is a term which represents a goal, i.e., an atom or a structure.
(basic_props:callable/1)
erase(Ref)
Deletes the clause referenced by Ref.
Usage 2:
Ref is a reference of a dynamic or data clause.
(data_facts:reference/1)
data_facts)
Usage: fact(F)
F is a fact (an atom or a structure).
Usage: reference(R)
R is a reference of a dynamic or data clause.
Go to the first, previous, next, last section, table of contents.