我嘗試使用基於GNU Prolog的Prolog腳本實現C接口。我的問題是獲取嵌套Prolog列表的單個元素。在C接口中從Prolog獲取列表元素
實際上我的C代碼看起來像
...
int func;
PlTerm arg[10];
PlTerm *sol_gb;
PlBool res;
int nmb;
char *strHead;
char *strTail;
PlLong nummero;
PlTerm pl_nummero;
Pl_Start_Prolog(argc, argv);
Pl_Query_Begin(PL_TRUE);
arg[0] = Pl_Mk_String(strRName);
arg[1] = Pl_Mk_Variable();
arg[2] = Pl_Mk_Variable();
arg[3] = Pl_Mk_String("true");
res = Pl_Query_Call(func, 4, arg);
sol_gb = Pl_Rd_List(arg[2]);
nmb = Pl_List_Length(sol_gb[0]);
strHead = Pl_Write_To_String(sol_gb[0]);
printf("strHead = %s\n",strHead);
strTail = Pl_Write_To_String(sol_gb[1]);
printf("strTail = %s\n",strTail);
...
序言列表arg中返回[2]看起來像
[ [ Spezial Bolognese,
[2, ,Zwiebeln,300,gramm,Hackfleisch,10, ,Tomaten,
100,ml,Sahne,500,gramm,Spaghetti]
],
[ Spaghetti Bolognese,
[2, ,Zwiebeln gehackt,300,gramm,Hackfleisch,10, ,Fleischtomaten,
100,ml,Sahne,500,gramm,Spaghetti]
]
]
轉換的輸出轉換成一個字符串是
strHead = [Spezial Bolognese,[2, ,Zwiebeln gehackt,300,gramm,Hackfleisch,
10, ,Fleischtomaten,100,ml,Sahne,500,gramm,Spaghetti]]
strTail = [[Spaghetti Bolognese,[2, ,Zwiebeln gehackt,300,gramm,Hackfleisch,
10, ,Fleischtomaten,100,ml,Sahne,500,gramm,Spaghetti]]]
所以我認爲,我「幾乎在那裏」,但因爲我不得不重新激活我的C知識,我沒有得到解決方案如何進入列表的下一個級別最後得到每個元素作爲字符串(「Spezial Bolognese」,下一步:「2」,「Zwiebeln」等)。
我該如何逐步瀏覽C中的Prolog列表?
我會很高興每一個提示,再次感謝你!
很多,非常感謝! :)我會測試它,然後給出反饋。 - - 有用!!呃,我真的很感謝你的幫助! – kiw 2014-09-25 07:33:33