使用XSB Prolog';SCAPI(嵌入式)

使用XSB Prolog';SCAPI(嵌入式),c,prolog,xsb,C,Prolog,Xsb,我有一个嵌入XSB Prolog的程序(C++),用作约束求解器。我已经编写了使用低级C API注入事实和运行查询的代码。但我遇到了一个特殊的问题 我希望(出于调试目的)运行一个查询,然后将查询所统一的每个术语输出到一个流中。为了确保输出良好,我认为最好使用string:term_to_atom/2的输出来生成字符串 因此,我想将查询项放在寄存器1中,运行xsb_query(),然后对结果运行string:term_to_atom/2。但是运行字符串:TymithtoObAs/2 是一个查询本身

我有一个嵌入XSB Prolog的程序(C++),用作约束求解器。我已经编写了使用低级C API注入事实和运行查询的代码。但我遇到了一个特殊的问题

我希望(出于调试目的)运行一个查询,然后将查询所统一的每个术语输出到一个流中。为了确保输出良好,我认为最好使用
string:term_to_atom/2
的输出来生成字符串

因此,我想将查询项放在寄存器1中,运行
xsb_query()
,然后对结果运行
string:term_to_atom/2
。但是运行<代码>字符串:TymithtoObAs/2 是一个查询本身,当你在查询的中间时,你不能运行<代码> XSBBQuices()/<代码>。 我尝试使用
xsb\u query\u save()
,希望随后可以执行子查询,然后执行
xsb\u query\u restore()
,但这似乎不起作用。对我的子查询的调用仍然会爆炸,因为已经有一个查询在进行中

我考虑过保存一个由
p2p_new()
创建的变量向量,这些变量已使用
p2p_unified()
reg_term(1)
进行了统一,但我不知道这些术语如何或何时被垃圾收集,因为我认为XSB Prolog无法知道我的C程序正在使用它们。(除非当我处理完它们时,我应该调用未记录的
p2p\u deref()

最后,我希望在单个查询中执行此操作(如果可能的话),以避免将名称空间与临时规则混淆。但也许我太努力了,我应该完全用另一种方法。想法