Я новичок в Mathlink, и, прежде чем интегрировать его в свой код, я попытался написать небольшой REPL, чтобы привыкнуть к нему. Код выглядит следующим образом (irrelevent части опущены, и простите за ужасную смесь C и C++):REPL (Read-eval-print loop) с Mathlink (Wolfram Mathematica)
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;
}
но это, кажется, не работает. Я попытался заменить цикл while одной инструкцией MLNextPacket, но безрезультатно; Я часами искал документацию по Mathlink, но это большой беспорядок! Где я делаю это неправильно?
Работает как очарование, спасибо! Но если я попытался выйти из вида с CTRL-D, программа выйдет из строя ... Я добавил за пределы цикла: \t MLPutFunction (lp, «Exit», 0); \t closelink(); \t deinit(); но это не помогает ... – zakk