# Using HoldForm for a changing list

I have a 'list' of the form an expansion: F = (A + A)(B + B), such that F[] produces the result

AB.


Based on the values that appear in the brackets, I multiply the term with a certain term. I do this for each term in the Expansion of F, i.e. by using the iteration Do[ ... , {i, 1, Length[F], 1}]. However, when I multiply each term in F the ordering of terms change and I end up multiplying the same term more than once.

How could I use the HoldForm even when the list changes - where the change being the multiplication of each term in the list. I would want the order of terms to remain the same as the initial definition of $F$. Namely, I would like to multiply the first term of F by a predefined function that I have Bra[2,0] and so I obtain

AB + AB + AB + ABBra[2,0],


but since I am iterating over each term (to multiply them) I would like for the outcome to instead read

ABBra[2,0] + AB + AB + AB.


In this way I would be able to change the second term of the 'list' and the whole procedure would be correct - you can see if I tried to change the second term of the list F when its order changes, I will be changing the wrong term.

I have seen similar posts, but not the case which makes use of the HoldForm function for a list changes. Thanks.

• Something like List @@ Expand [F]? – J. M.'s technical difficulties Jun 3 '15 at 10:41
• I have tried to multiply each of the terms in List @@ Expand [F], but the ordering of terms still change. I will make it more clear what I want to achieve. – Sid Jun 3 '15 at 10:52
• @Guesswhoitis, converting the expression to a list does in fact work and I can achieve what I want through this method. However, would it be possible to still HoldForm for a list which changes. – Sid Jun 3 '15 at 11:40

One way to use HoldForm is to do something involving Insert like this:

F = (A + A) (B + B);

G = HoldForm[Evaluate@Expand@F];
Do[G = Insert[G, Bra[2, i - 1], {1, i, 3}], {i, 1, Length@Expand@F}];
G = ReleaseHold@G

A B Bra[2, 0] + A B Bra[2, 1] + A B Bra[2, 2] + A B Bra[2, 3]


This process is a little simpler with the Fold operation:

G = HoldForm[Evaluate@Expand@F;
G = ReleaseHold@Fold[Insert[#1, Bra[2, #2 - 1], {1, #2, 3}] &, G, Range@Length@Expand@F]

A B Bra[2, 0] + A B Bra[2, 1] + A B Bra[2, 2] + A B Bra[2, 3]


That said, I would still recommend the more natural Mathematica way recommended by Guess who it is:

Total@MapIndexed[#1 Bra[2, First@#2 - 1] &, List @@ Expand@F]

A B Bra[2, 0] + A B Bra[2, 1] + A B Bra[2, 2] + A B Bra[2, 3]