1
我是Mathlink的新手,在将其集成到我的代码之前,我试着写一个小的REPL以习惯它。的代码如下(无关紧要部分省略,并且用于可怕共混物C和C++的对不起):用Mathlink(Wolfram Mathematica)编译REPL(Read-eval-print loop)
int main(int argc,char **argv)
{
init_and_openlink(argc,argv);
while(!feof(stdin))
{
int pkt;
char buf[1024];
if(!fgets(buf,1024,stdin))
continue;
MLPutFunction(lp,"EnterTextPacket",1);
MLPutString(lp,buf);
MLEndPacket(lp);
while(((pkt=MLNextPacket(lp),pkt))&&(pkt!=RETURNPKT))
{
MLNewPacket(lp);
if(MLError(lp))
return 1;
}
const char *result;
MLGetString(lp,&result);
printf("%s\n",result);
MLReleaseString(lp,result);
}
return 0;
}
但是它似乎没有在所有的工作。我试过用单条MLNextPacket指令替换while循环,但无济于事;我花了几个小时搜索Mathlink文档,但那是一个大混乱!我在哪里做错了?
工作就像一个魅力,谢谢!但如果我试图用CTRL-D退出外观程序崩溃......我在循环外添加了: \t MLPutFunction(lp,“Exit”,0); \t closelink(); \t deinit(); 但它没有帮助... – zakk