从C创建prolog列表

时间:2013-10-17 06:26:09

标签: c sicstus-prolog clpfd

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

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

我要创建的列表是传递给标签/ 2的opions列表,如[leftmost,step,up,all],但我想在运行时创建并填写此列表,并将其传递给Sicstus序言

1 个答案:

答案 0 :(得分: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中尽可能多地做到这一点。