Прозрачнее вместо
e[[0]] использовать
Head[e].
op(x+y) вернёт x, y, т. е. операнды
Завёрнутыми в список вернёт? Если так, то вам надо
List @@ e или, что то же самое,
Apply[List, e].
Hold bocovp здесь употребил, чтобы выражение не вычислялось. Если попытаться брать вышеуказанные вещи от выражения, оно перед этим вычислится. Возможно, во что-то компактное, а возможно, что и вообще в странное что-нибудь, с другими компонентами. Но если использовать
Hold как выше, то вместо
Plus для
Head[Hold[2+3]] оператора будет возвращаться
Hold! Правильное решение есть, щас я его найду, а то забыл.
-- Вс дек 25, 2011 02:39:44 --А именно: вместо
Hold оборачивайте выражение, которое хотите разделить на кусочки, в
Unevaluated. (Введена во второй версии.) Эта штука имеет единственную цель: подать свой аргумент во внешнюю функцию невычисленным. Даже если та просит (есть те, которые не всегда просят в некоторых местах, см.
http://reference.wolfram.com/mathematica/tutorial/NonStandardEvaluation.html; кстати, там ещё упоминается дельная функция
Extract, вдруг пригодится).
-- Вс дек 25, 2011 02:41:56 --Не забудьте также и о том, что Mathematica не делит свои выражения на операции и что-то ещё, все они предстают для неё одинаковыми в форме
голова[параметры]. Собственно, потому функция для выделения из суммы плюса и называется
Head.