Цепочка пакетов в MathLink: пакеты всегда строго упорядочены? - PullRequest
1 голос
/ 21 февраля 2011

В документации не указано четкое расположение возвращаемых пакетов. ведомым ядром через MathLink. Естественно предположить, что (когда отправка входного выражения с заголовком EnterExpressionPacket и работа в стандартном режиме):

1) последний пакет перед следующим InputNamePacket всегда ReturnExpressionPacket

2) всегда может быть только один ReturnExpressionPacket и один OutputNamePacket за одного EnterExpressionPacket

3) ReturnExpressionPacket всегда следующий после OutputNamePacket

4) после MessagePacket следующий пакет всегда TextPacket с все содержимое этого сообщения

5) в стандартном режиме есть только 7 типов возвращаемых пакетов: InputNamePacket, OutputNamePacket, ReturnExpressionPacket, DisplayPacket, DisplayEndPacket, MessagePacket, TextPacket.

Какие из этих утверждений верны?

1 Ответ

4 голосов
/ 21 февраля 2011
  • 1, вероятно, не гарантировано.
  • 2 определенно не соответствует действительности (оценка: "2 + 2 \ n2 + 3").
  • 3, вероятно, верно, но, вероятно, не гарантировано.
  • Я считаю, что 4 верно.
  • 5 не гарантируется.

В общемследует написать свой код, чтобы не полагаться на порядок пакетов, поступающих из ядра.Оценку следует считать «активной», пока вы не получите новый InputNamePacket.OutputNamePacket должен обновить некоторую переменную.ReturnExpressionPacket должен использовать текущее имя вывода из этой переменной.Если вы получили неизвестный пакет, просто проигнорируйте его и переходите к следующему пакету.

...