MathLink(Wolfram Mathematica)とREPL(READ-EVAL-PRINTループ)
-
12-11-2019 - |
質問
私はMathLinkに慣れており、コードを統合する前に、私はそれに慣れているために小さな答えを書いてみました。コードは次のとおりです(無関心な部分は省略され、CとC ++の恐ろしいブレンドでごめんなさい):
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のマニュアルを検索する時間を過ごしましたが、その人は大きな混乱です!私がそれを間違っているところ?
解決
EnterTextPacket MathLinkパケットには、カーネルが包まれた結果を返します。 ReturnTextPacket MathLinkパケット。whileループの状態を変更してみてください。
while(((pkt=MLNextPacket(lp),pkt))&&(pkt!=RETURNTEXTPKT))
. 所属していません StackOverflow