Дело в том, что мне требуется извлекать слагаемые из того выражения, которое имеется изначально.
А, ну если так, тогда надо просто его «заморозить» с помощью
Hold (в более сложном случае можно
HoldComplete, см. снова документацию, когда). Ещё можно использовать
Unevaluated, если это выражение встречается всего раз (иначе его придётся копипастить).
Код:
> e = Hold[(1 + 2) (3 + 4)]
> e[[1, 2, 1]] (* первая 1 — учитываем обёрнутость в Hold *)
> Unevaluated[(1 + 2) (3 + 4)][[2, 1]]
Hold[(1 + 2) (3 + 4)]
3
3
Можно модифицировать замороженое и отпустить:
Код:
> e[[1, 2, 1]] = 10; e
> ReleaseHold[e]
Hold[(1 + 2) (10 + 4)]
42
-- Пт окт 07, 2016 02:07:40 --Наконец, если вдруг нужно будет
отображать замороженное выражение без
Hold[...], можно вместо него использовать
HoldForm. Работает точно так же, но на выводе не показывается:
Код:
> HoldForm[(1 + 2) (3 + 4)]
> %[[1, 2, 1]]
(1 + 2) (3 + 4)
3