2012-01-23 38 views
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文档,但那是一个大混乱!我在哪里做错了?

回答

1

EnterTextPacket MathLink数据包将使内核返回封装在MathLink数据包中的结果。尝试改变您的while循环中的条件:

while(((pkt=MLNextPacket(lp),pkt))&&(pkt!=RETURNTEXTPKT)) 
+0

工作就像一个魅力,谢谢!但如果我试图用CTRL-D退出外观程序崩溃......我在循环外添加了: \t MLPutFunction(lp,“Exit”,0); \t closelink(); \t deinit(); 但它没有帮助... – zakk

相关问题