clause/[2,3]
Module: builtins
clause/2 — retrieve a clause
clause/3 — retrieve a clause with a database reference
instance/2 — retrieve a clause from the database reference
FORMS
clause(Head, Body)
clause(Head, Body, Ref)
instance(Ref, Clause)
DESCRIPTION
When Head is bound to a non-variable term, the current module is searched for a clause whose head matches Head and whose body matches Body. If there is more than one clause that matches, then successive Heads and Bodys will be generated upon backtracking.
When a fact is found, Body will be unified with the atom true.
clause/3 unifies its third argument with the database reference that corresponds to the clause that was found. When Ref is instantiated in a call to clause/3, the other two arguments can be uninstantiated.
:/2 can be used to specify which module should be searched. If Ref is a valid database reference, instance(Ref, Clause) retrieves the Prolog clause referenced by Ref and unifies it with Clause.
EXAMPLES
The following examples show the use of clause/2 :
?- listing(fruit/1).
% unusual:fruit/1
fruit(tomato).
fruit(kiwi).
% user:fruit/1
fruit(apple).
fruit(_A) :- product(_A,plantGrowth) ; product(_A,plantFertilization).
fruit(orange).
yes.
?- clause(fruit(apple),true).
yes.
?- clause(fruit(X),Body).
X=apple
Body=true ;
X=X
Body=product(X,plantGrowth) ; product(X,plantFertilization) ;
X=orange
Body=true ;
no.
?- unusual:clause(fruit(X),Body).
X=tomato
Body=true ;
X=kiwi
Body=true ;
no.
ERRORS
If Ref is not instantiated to a database reference and Head is uninstantiated, the call to clause/3 fails.