Цепочка пакетов в MathLink: пакеты всегда строго упорядочены?
Документация не устанавливает четкий порядок пакетов, возвращаемых подчиненным ядром через 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 ответ
- 1, вероятно, не гарантируется.
- 2 определенно не соответствует действительности (оцените: "2 + 2 \ n2 + 3").
- 3, вероятно, правда, но, вероятно, не гарантировано.
- Я считаю, что 4 это правда.
- 5 не гарантируется.
В общем случае вы должны писать свой код, чтобы не полагаться на порядок пакетов, поступающих из ядра. Оценку следует считать "активной", пока вы не получите новый InputNamePacket. OutputNamePacket должен обновить некоторую переменную. ReturnExpressionPacket должен использовать текущее имя вывода из этой переменной. Если вы получили неизвестный пакет, просто проигнорируйте его и переходите к следующему пакету.