我尝试使用基于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