Создать список пролога из C

У меня есть 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, например [самый левый, шаг, вверх, все], но я хочу создать и заполнить этот список во время выполнения и передать его в Sicstus Prolog.


person MortenM    schedule 17.10.2013    source источник


Ответы (1)


Вы можете использовать SP_cons_list() для создания новой ячейки списка из ее головы и хвоста. Это,

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

примерно соответствует коду Пролога:

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.

Конечно, еще проще сделать все это на Прологе.

person Per Mildner    schedule 17.10.2013