次の置換規則を使用して、乗算記号「*」を「tensor」に、累乗記号「^」を「p_tensor」に置換したい。
a(k)^n --> p_tensor(n,a(k))
a(i)*a(j) --> tensor(a(i),a(j)), when i=/=j
ただし、3 * a(i)のように、記号「*」が数値とa(i)の間にある場合は、記号「*」をそのままにしておく必要があります。
たとえば、
5*a(i)*a(j)*(a(k1)+3*a(k2)) --> 5*tensor(tensor(a(i),a(j)),a(k1)+3*a(k2))
a(i)^2*a(j)^2 --> tensor(p_tensor(2,a(i)),p_tensor(2,a(j)))
...
ここで、AWK、sed、またはPerlを使用して次の式を再フォーマットしたいと思います。
3*a(3)^2+6*a(1)^2*(5*a(2)^2-2*a(4))+6*a(2)*a(4)+6*a(1)*(-4*a(2)*a(3)+a(5))
どのようにアイデアはありますか?
置換後の期待される結果は次のようになります
3*p_tensor(2,a(3))+6*tensor(p_tensor(2,a(1)),(5*p_tensor(2,a(2))-2*a(4))+6*tensor(a(2),a(4))+6*tensor(a(1),(-4*tensor(a(2),a(3))+a(5))