REPL (цикл чтения-оценки-печати) с Mathlink (Wolfram Mathematica) - PullRequest
1 голос
/ 23 января 2012

Я новичок в 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, но это большой беспорядок! Где я делаю это неправильно?

1 Ответ

1 голос
/ 23 января 2012

Пакет EnterTextPacket MathLink заставит ядро ​​вернуть результат, упакованный в пакет ReturnTextPacket MathLink.Попробуйте изменить условие в цикле while на:

while(((pkt=MLNextPacket(lp),pkt))&&(pkt!=RETURNTEXTPKT))
...