ubc.cs.JLog.Terms
Class jBuiltinPredicate

java.lang.Object
  extended by ubc.cs.JLog.Foundation.jType
      extended by ubc.cs.JLog.Terms.jTerm
          extended by ubc.cs.JLog.Terms.iPredicate
              extended by ubc.cs.JLog.Terms.jBuiltinPredicate
All Implemented Interfaces:
iType, iUnifiable, iConsultable, iName, iNameArity, iTerm, iValue
Direct Known Subclasses:
jBinaryBuiltinPredicate, jCut, jDBDisconnect, jFail, jNaryBuiltinPredicate, jQuadaryBuiltinPredicate, jRepeat, jTrinaryBuiltinPredicate, jTrue, jUnaryBuiltinPredicate

public abstract class jBuiltinPredicate
extends iPredicate

This is the abstract base for builtin predicates. The parser must create the appropriate object for builtin predicates. Builtins do not appear in the database and are designed to provide a way to optimize a predicate or provide additional functionallity.

Author:
Glendon Holst

Field Summary
 
Fields inherited from class ubc.cs.JLog.Foundation.jType
type
 
Fields inherited from interface ubc.cs.JLog.Terms.iTerm
EQUAL, GREATER_THAN, LESS_THAN
 
Fields inherited from interface ubc.cs.JLog.Foundation.iType
TYPE_ARITHMETIC, TYPE_ATOM, TYPE_BUILTINPREDICATE, TYPE_COMMAND, TYPE_COMPARE, TYPE_COMPOUND, TYPE_CONS, TYPE_IF, TYPE_INTEGER, TYPE_LIST, TYPE_NULLLIST, TYPE_NUMERICCOMPARE, TYPE_OBJECT, TYPE_OPERATOR, TYPE_OR, TYPE_ORPREDICATE, TYPE_PREDICATE, TYPE_PREDICATETERMS, TYPE_REAL, TYPE_TYPE, TYPE_UNARYARITHMETIC, TYPE_UNARYOPERATOR, TYPE_UNDEFINED, TYPE_VARIABLE
 
Constructor Summary
jBuiltinPredicate()
           
 
Method Summary
protected  int compareArguments(iPredicate ipred, boolean first_call, boolean var_equal)
          Compares predicate aguments.
 jTerm copy(jVariableRegistry vars)
          Internal member function which creates a copy of this term.
 jTerm duplicate(jVariable[] vars)
          Creates a complete and entirely independant duplicate of this term.
 void enumerateVariables(jVariableVector v, boolean all)
          Adds variables belonging to this term (or belonging to any sub-part of this term) to the jVariableVector
 boolean equivalence(jTerm term, jEquivalenceMapping v)
          The public interface for evaluating term equivalence (i.e., structural similarity).
protected  boolean equivalenceArguments(jBuiltinPredicate pterm, jEquivalenceMapping v)
          Equivalence test arguments.
 int getArity()
          Returns the arity of this instance.
 boolean isConsultNeeded()
          Determine if cached values already exist and hence if consulting is required.
 void registerVariables(jVariableVector v)
          Adds all variables belonging to this term (or belonging to any sub-part of this term) to the jUnifiedVector Should be called during the consultation phase by rules for their owned terms both head and base.
 java.lang.String toString(boolean usename)
          Produces a string identifying this term, suitable for display to the console.
 boolean unify(jTerm term, jUnifiedVector v)
          Unification.
protected  boolean unifyArguments(jBuiltinPredicate pterm, jUnifiedVector v)
          Unification of arguments.
 
Methods inherited from class ubc.cs.JLog.Terms.iPredicate
addGoals, addGoals, compare, getArguments
 
Methods inherited from class ubc.cs.JLog.Terms.jTerm
compare, consult, consultReset, copy, getName, getTerm, getValue, registerUnboundVariables, requiresCompleteVariableState, toString
 
Methods inherited from class ubc.cs.JLog.Foundation.jType
getType, objectToString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface ubc.cs.JLog.Terms.iName
getName
 

Constructor Detail

jBuiltinPredicate

public jBuiltinPredicate()
Method Detail

getArity

public int getArity()
Description copied from interface: iNameArity
Returns the arity of this instance.

Returns:
int whose value is the arity of this instance.

compareArguments

protected int compareArguments(iPredicate ipred,
                               boolean first_call,
                               boolean var_equal)
Compares predicate aguments. Override in classes with different arities.

Specified by:
compareArguments in class iPredicate
Parameters:
ipred - the iPredicate to compare with this instance of iPredicate.
first_call - true if just invoked by public compare member function. false otherwise.
var_equal - if var_equal is true, then unbound variables are considered equal. var_equal = false is standard prolog behavior.
Returns:
LESS_THAN if this instance is less than term, EQUAL if the two terms are equal, and GREATER_THAN if this instance is greater than term.

isConsultNeeded

public boolean isConsultNeeded()
Description copied from interface: iConsultable
Determine if cached values already exist and hence if consulting is required. If object does not knowimmediatly whether consulting is needed, then assuming it is required.

Specified by:
isConsultNeeded in interface iConsultable
Specified by:
isConsultNeeded in interface iTerm
Overrides:
isConsultNeeded in class jTerm
Returns:
false if cached values are valid, true otherwise, if consult should be called.

equivalence

public boolean equivalence(jTerm term,
                           jEquivalenceMapping v)
Description copied from interface: iTerm
The public interface for evaluating term equivalence (i.e., structural similarity).

Specified by:
equivalence in interface iTerm
Specified by:
equivalence in class jTerm
Parameters:
term - the jTerm to compare with this instance of jTerm.
v - v is the collection of equivalent variable pairs found. It should be empty when first calling this function.
Returns:
true if this instance is equivalent to term, false otherwise.

unify

public boolean unify(jTerm term,
                     jUnifiedVector v)
Unification. For builtin predicates, unification may happen when they are arguments to predicates.

Specified by:
unify in interface iUnifiable
Specified by:
unify in interface iTerm
Specified by:
unify in class jTerm
Parameters:
term - the term to unify with this instance.
v - the vector of variables bound during unification. Even if unification fails, this vector may contain recently bound vectors. This parameter is used to as output to the caller, not as input for unify.
Returns:
true if unification succeeded, false otherwise.

equivalenceArguments

protected boolean equivalenceArguments(jBuiltinPredicate pterm,
                                       jEquivalenceMapping v)
Equivalence test arguments. Similar behavior to that of equivalence.

Parameters:
pterm - We are assured that pterm has the same type, name, and arity.
v - same as jEquivalenceMapping parameter in equivalence.
Returns:
Should test for instanceof as required and return false if there is no match, true otherwise.

unifyArguments

protected boolean unifyArguments(jBuiltinPredicate pterm,
                                 jUnifiedVector v)
Unification of arguments. Similar behavior to that of unify.

Parameters:
pterm - We are assured that pterm has the same type, name, and arity.
v - same as jUnifiedVector parameter in unify.
Returns:
Should test for instanceof as required and return false if there is no match, true otherwise.

registerVariables

public void registerVariables(jVariableVector v)
Description copied from class: jTerm
Adds all variables belonging to this term (or belonging to any sub-part of this term) to the jUnifiedVector Should be called during the consultation phase by rules for their owned terms both head and base. all variables encountered should be unbound. After call, this term should not be modified in any way.

Specified by:
registerVariables in interface iTerm
Specified by:
registerVariables in class jTerm
Parameters:
v - The jUnifiedVector where variables are added to. This parameter is used to as output to the caller, not as input.

enumerateVariables

public void enumerateVariables(jVariableVector v,
                               boolean all)
Description copied from class: jTerm
Adds variables belonging to this term (or belonging to any sub-part of this term) to the jVariableVector

Specified by:
enumerateVariables in interface iTerm
Specified by:
enumerateVariables in class jTerm
Parameters:
v - The jVariabeVector where variables are added to. This parameter is used to as output to the caller, not as input.
all - If true, then all variables should register, otherwise only add non-existentially qualified variables.

duplicate

public jTerm duplicate(jVariable[] vars)
Description copied from class: jTerm
Creates a complete and entirely independant duplicate of this term. User should call only for terms for which registerVariables has already been invoked. Within duplicate, any other calls to duplicate should pass along the same vars array produced by registerVariables since the same duplication path previously taken by registerVariables should be taken by duplicate. This call is designed only for terms which belong to rules and are templates for instantiation. Any variables in the term should be unbound. As implied by the modification restrictions on registerVariables, terms and their children cannot change (especially during call!)

Specified by:
duplicate in interface iTerm
Specified by:
duplicate in class jTerm
Parameters:
vars - The user passes in a duplicate of the variable vector produced from the previous call to registerVariables. vars is produced from the jVariableVector by creating a single duplicate variable for each variable. Since this is created in the same order as the registerVariables, it is now efficient for jVariables to return their unique duplicate.
Returns:
jTerm which is an instantiated duplicate of this term.

copy

public jTerm copy(jVariableRegistry vars)
Description copied from class: jTerm
Internal member function which creates a copy of this term. This member function is designed to duplicate a term, but without the restrictions of the duplicate function. Should only be invoked by copy() or other copy(vars). Should only invoke other copy(vars) functions. Bound variables should return a copy of the bound term.

Specified by:
copy in interface iTerm
Specified by:
copy in class jTerm
Parameters:
vars - The registry of variables and their duplicates. Initially this is empty. As variables generate copies, they add themselves and their copy to the jVariableRegistry, and this is output from the function call. Any further calls with the same vars ensures that the same variable (in a different term) returns the same copy.
Returns:
jTerm which is an instantiated copy of this term.

toString

public java.lang.String toString(boolean usename)
Description copied from class: jTerm
Produces a string identifying this term, suitable for display to the console. param usename determines whether to display variables by name or identity. false is the default for displaying the term, true for displaying this term in a user query.

Specified by:
toString in interface iTerm
Specified by:
toString in class jTerm
Returns:
String which is a textual representation of this term.