29 using namespace opencog;
34 #define dbgprt(f, varargs...) printf(f, ##varargs)
36 #define dbgprt(f, varargs...)
43 printf(
"%s (invalid handle)\n", msg);
47 printf(
"%s %s\n", msg, str.c_str());
67 #define POPGND(soln,stack) { \
68 OC_ASSERT(not stack.empty(), "Unbalanced grounding stack"); \
120 BetaRedexPtr cpl(BetaRedexCast(lp));
126 Handle hsat(cpl->get_definition());
128 if (NULL == sat_link)
129 throw InvalidParamException(TRACE_INFO,
130 "Expecting PatternLink, got %s",
131 hsat->toString().c_str());
134 _varlist = &sat_link->get_variables();
135 _pat = &sat_link->get_pattern();
140 const Variables& local_args(cpl->get_local_args());
141 const HandleSeq& redex_args(cpl->get_args());
148 size_t sz = redex_args.size();
149 for (
size_t i=0; i< sz; i++)
154 local_grounding.insert({local_args.varseq[i], iter->second});
159 throw InvalidParamException(TRACE_INFO,
160 "Redex can currently handle only one clause!");
166 throw RuntimeException(TRACE_INFO,
"Unimplemented yet");
177 for (
const ConnectPair& vk : _connectivity_map)
187 throw InvalidParamException(TRACE_INFO,
188 "Badly structured redex!");
190 prtmsg(
"redex starting with clause: ", root);
192 curr_term_handle = join;
195 bool found = soln_up(curr_soln_handle);
199 dbgprt(
"redex finishing; found match=%d\n", found);
213 for (
size_t i=0; i< sz; i++)
215 auto iter = local_grounding.find(local_args.varseq[i]);
216 if (iter != local_grounding.end())
#define dbgprt(f, varargs...)
std::vector< Handle > HandleSeq
a list of handles
std::stack< const Pattern * > _stack_pattern
std::map< Handle, Handle > var_grounding
virtual std::string toShortString(std::string indent="")=0
std::shared_ptr< Link > LinkPtr
const Variables * _varlist
void clause_stacks_push(void)
static const Handle UNDEFINED
void clear_current_state(void)
std::stack< const Variables * > _stack_variables
static PatternLinkPtr PatternLinkCast(const Handle &h)
std::shared_ptr< PatternLink > PatternLinkPtr
bool redex_compare(const LinkPtr &, const LinkPtr &)
std::map< Handle, Handle > SolnMap
void clause_stacks_pop(void)
static void prtmsg(const char *msg, const Handle &h)