У меня была еще одна странная проблема, которую я уже решил. Но я не уверен, что просто удачно исправил это или действительно понимаю, что происходит. Итак, в основном я выполняю запрос по моим фактам через:
DATA_OBJECT decay_tree_fact_list;
std::stringstream clips_query;
clips_query << "(find-all-facts ((?f DecayTree)) TRUE)";
EnvEval(clips_environment_, clips_query.str().c_str(), &decay_tree_fact_list);
Затем я просматриваю список фактов и извлекаю необходимую информацию. Там я также делаю еще один «подзапрос» для каждого из найденных выше фактов следующим образом
DATA_OBJECT spin_quantum_number_fact_list;
std::stringstream clips_query;
clips_query << "(find-fact ((?f SpinQuantumNumber)) (= ?f:unique_id "
<< spin_quantum_number_unique_id << "))";
EnvEval(clips_environment_, clips_query.str().c_str(),
&spin_quantum_number_fact_list);
Все это отлично работает для первого факта DecayTree, независимо от того, с какой позиции я начинаю, но для следующего происходит сбой, потому что адрес факта является поддельным. Я проследил проблему до подзапроса, который я делаю. Итак, что я сделал, чтобы решить проблему, так это сохранить все адреса фактов DecayTree в векторе, а затем обработать его. Поскольку я не мог найти никакой информации о своей теории, я хотел спросить здесь.
Итак, мой вопрос довольно прост и будет заключаться в следующем: Если я выполняю два запроса друг за другом, становится ли полученная информация первого запроса недействительной, как только я вызываю второй запрос?