33#include<unordered_map>
35#include "VariableIndex.hpp"
39using std::unordered_map;
41using std::ostringstream;
45using VarMapType = pair<Variable*,Term*>;
72 Term() : v(nullptr), f(nullptr), args() {}
102 inline Arity
arity()
const {
return args.size(); }
125 string to_string(
bool =
false,
bool =
false)
const;
276 unordered_map<Variable*,Term*>&)
const;
284 friend ostream& operator<<(ostream&,
const Term&);
Basic representation of functions.
General representation of terms.
Function * get_subbed_f() const
Taking substitution into account, what function do we actually have?
Term * make_copy_with_new_vars(VariableIndex &, TermIndex &) const
Does as the name suggests.
bool is_unsubbed_variable() const
Is this a variable that hasn't been substituted?
string make_LaTeX(bool=false) const
Make a useable LaTeX representation.
Variable * get_v() const
Self-explanatory access function.
bool subbed_equal(Term *) const
Equality test, taking substitution into account.
Term * skip_leading_variables() const
It may be that there is a chain of substitutions attached to a variable.
void find_subbed_vars(set< Variable * > &) const
Taking substitution into account, find all the variables in a term.
bool subbed_is_variable() const
Is this term a variable, taking substitution into accoumt?
set< Term * > all_variables() const
Assuming nothing has been substituted, find all the variables in this term.
Term * make_copy_with_new_vars_helper(VariableIndex &, TermIndex &, unordered_map< Variable *, Term * > &) const
Main implementation of make_copy_with_new_vars.
string to_string(bool=false, bool=false) const
Make a string representation of the Term, taking into account any substitutions that have been made.
Term()
Constructors - these are private as Terms should only ever be constructed by the TermIndex,...
Term * skip_leading_variables_for_unification(bool &, Variable *&, Function *&, size_t &) const
It may be that there is a chain of substitutions attached to a variable.
bool is_ground() const
Is the term ground?
Variable * subbed_variable() const
Taking substitution into account, what variable do we actually have?
Arity get_subbed_arity() const
Taking substitution into account, what arity do we actually have?
Function * get_f() const
Self-explanatory access function.
bool contains_variable(Variable *) const
Taking substitution into account, does the term include the variable passed?
bool operator==(const Term &) const
For the TermIndex you want strict equaliity of the data members.
bool is_function() const
Self-explanatory.
bool is_variable() const
Self-explanatory.
string to_prolog_string() const
Convert to a string that can be read by Prolog.
bool is_subbed() const
Test whether any variable has been substituted.
Arity arity() const
Self-explanatory access function.
Term * operator[](size_t) const
Access to args, but don't mess with them!
bool subbed_is_function() const
Is this term a function, taking substitution into accoumt?
Look after terms, using hash consing to avoid storing copies of terms.
Basic representation of variables.
Storage of named variables, and management of new, anonymous and unique variables.