1

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

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

所以,我想把查询词放在寄存器 1 中,运行xsb_query(),然后运行string:term_to_atom/2结果。但是运行string:term_to_atom/2本身就是一个查询,你不能xsb_query()在查询中间运行。

我尝试使用xsb_query_save(),希望我可以做一个子查询,然后是xsb_query_restore(),但这似乎不起作用。对我的子查询的调用仍然失败,因为已经有一个查询正在进行中。

我考虑过保存一个使用withp2p_new()统一创建的变量向量,但我不知道这些术语如何或何时会被垃圾收集,因为我认为 XSB Prolog 无法知道我的 C 程序正在使用它们。(除非我应该在处理完他们后给他们打电话给无证人员?)p2p_unify()reg_term(1)p2p_deref()

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

4

0 回答 0