2013-10-17 48 views
1

我有一个C程序作为Sicstus Prolog运行时的前端。我试图在C中创建一个列表,将其填充并传递给Prolog运行时。我看了一下C库,但是我没有找到有关如何完成这些任务的任何信息。我想这不是一个单一的函数调用,而是一个组合(?)从C创建序言列表

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

我想要创建的列表是opions列表传递到标签/ 2像[最左,步,上,所有],但我想创建并在运行时填写此列表,并将其传递给Sicstus Prolog。

回答

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中尽可能地做到这一点更容易。