1

私はMathlinkを初めて使用し、コードに統合する前に、それに慣れるために小さなREPLを作成しようとしました。コードは次のとおりです(無関係な部分は省略されており、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のドキュメントを検索するのに何時間も費やしましたが、それは大きな混乱です。私はそれを間違っているところですか?

4

1 に答える 1

1

EnterTextPacket MathLink パケットは、カーネルが ReturnTextPacket MathLink パケットにラップされた結果を返すようにます。while ループの条件を次のように変更してみてください。

while(((pkt=MLNextPacket(lp),pkt))&&(pkt!=RETURNTEXTPKT))
于 2012-01-23T19:02:50.120 に答える