1

我有一个 C 程序作为 Sicstus Prolog 运行时的前端。我正在尝试在 C 中创建一个列表,将其填写并传递给 Prolog 运行时。我已经查看了 C 库,但我没有找到任何有关如何执行此操作的信息。我想这不是一个单独的函数调用,而是一个组合(?)

我还看到 C 库中有几个与此相关的函数调用,例如(SP_put_list()、SP_put_list_codes()、SP_put_list_n_bytes()、SP_put_list_n_codes())

我要创建的列表是传递给 labeling/2 的选项列表,例如 [leftmost,step,up,all],但我想在运行时创建并填写此列表,并将其传递给 Sicstus Prolog。

4

1 回答 1

4

您可以使用 SP_cons_list() 从其头部和尾部创建一个新的列表单元格。那是,

SP_term_ref my_list = SP_new_term_ref();
if (!SP_cons_list(my_list, head, tail)) { goto error_handling; }

大致对应Prolog代码:

My_List = [Head|Tail]

如果速度不是很重要,使用 SP_read_from_string() 可能是最简单的,例如:

SP_term_ref my_list = SP_new_term_ref();
if (!SP_read_from_string(my_list, "[leftmost,step,up,all].", NULL)) {
   goto error_handling;
}
// my_list is [leftmost,step,up,all] here.

当然,在 Prolog 中尽可能多地做到这一点更加容易。

于 2013-10-17T10:05:47.060 回答