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