23 #include <opencog/atomspace/atom_types.h>
27 using namespace opencog;
51 throw InvalidParamException(TRACE_INFO,
"Expecting a PutLink");
61 throw InvalidParamException(TRACE_INFO,
"Expecting a PutLink");
71 throw InvalidParamException(TRACE_INFO,
"Expecting a PutLink");
80 throw InvalidParamException(TRACE_INFO,
"Expecting a PutLink");
118 throw InvalidParamException(TRACE_INFO,
"PutLinks should be arity 2!");
121 if (VARIABLE_NODE == body->
getType())
130 std::set<Handle> varset;
131 find_vars(varset, lll->getOutgoingSet());
137 if (
_varseq.size() == 1)
return;
140 if (lval->getType() == LIST_LINK)
142 if (lval->getArity() !=
_varseq.size())
143 throw InvalidParamException(TRACE_INFO,
144 "PutLink has mismatched size! Expected %zu, got %zu\n",
145 _varseq.size(), lval->getArity());
148 if (lval->getType() != SET_LINK)
149 throw InvalidParamException(TRACE_INFO,
150 "PutLink was expecting a ListLink or SetLink!");
152 for (
const Handle& h : lval->getOutgoingSet())
155 if (lse->getType() != LIST_LINK)
156 throw InvalidParamException(TRACE_INFO,
157 "PutLink was expecting a ListLink here");
158 if (lse->getArity() !=
_varseq.size())
159 throw InvalidParamException(TRACE_INFO,
160 "PutLink set element has mismatched size! Expected %zu, got %zu\n",
161 _varseq.size(), lse->getArity());
202 std::map<Handle, unsigned int>::const_iterator idx;
205 return args.at(idx->second);
210 if (NULL == lterm)
return term;
213 if (QUOTE_LINK == term->
getType())
return term;
217 for (
const Handle& h : lterm->getOutgoingSet())
232 oset.push_back(vals);
235 if (vals->
getType() == LIST_LINK)
241 OC_ASSERT(vals->
getType() == SET_LINK,
242 "Should have checked for this earlier, tin the ctor");
std::vector< Handle > HandleSeq
a list of handles
virtual Handle reduce(void)
std::shared_ptr< TruthValue > TruthValuePtr
std::shared_ptr< AttentionValue > AttentionValuePtr
std::map< Handle, unsigned int > _index
PutLink(Type, const HandleSeq &oset, TruthValuePtr tv=TruthValue::NULL_TV(), AttentionValuePtr av=AttentionValue::DEFAULT_AV())
std::shared_ptr< Link > LinkPtr
ClassServer & classserver(ClassServerFactory *=ClassServer::createInstance)
Handle do_reduce(void) const
static LinkPtr LinkCast(const Handle &h)
unsigned short Type
type of Atoms, represented as short integer (16 bits)
void find_vars(std::set< Handle > &, const HandleSeq &)
Handle substitute_nocheck(const Handle &, const HandleSeq &) const