2013-10-17 4 views
1

나는 Sicstus Prolog 런타임 프론트 엔드로 C 프로그램을 가지고 있습니다. 그리고 C로 목록을 만들고 채우고 Prolog 런타임에 전달하려고합니다. C 라이브러리를 살펴 봤지만 어떻게해야하는지에 대한 정보는 찾지 못했습니다. 이 함수는 하나의 함수 호출이 아니라 오히려 콤비네이션 (?)이라고 생각합니다.C에서 프롤로그 목록 만들기

C- 라이브러리에는 다음과 같은 몇 가지 함수 호출이 있습니다 (SP_put_list() , SP_put_list_codes(), SP_put_list_n_bytes(), SP_put_list_n_codes())

내가 만들고자하는 목록은 [leftmost, step, up, all]과 같은 라벨링/2에 전달할 opions 목록이지만, 만들고 싶습니다. 이 목록을 런타임에 채우고 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; } 

는 프롤로그 코드에 대략 대응한다 :

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에서이 작업을 가능한 한 많이 수행하는 것이 더 쉽습니다.