Ну, если они действительно называются a1
, a2
и т. Д., Вы можете сделать это:
Assign[x_, y_] := Module[{s1, s2, n, sn},
s1 = SymbolName[Unevaluated[x]];
s2 = SymbolName[Unevaluated[y]];
For[n = 1, n <= Length[x] && n <= Length[y], n++,
sn = ToString[n];
Evaluate[Symbol[s1 <> sn]] = Evaluate[Symbol[s2 <> sn]]
]
]
SetAttributes[Assign, HoldAll]
А потом
Clear[b1, b2, b3];
Clear[a1, a2, a3];
a = {a1, a2, a3}
b = {b1, b2, b3}
Assign[a, b]
a
Дает результаты для a
, b
и a
снова как:
{a1, a2, a3}
{b1, b2, b3}
{b1, b2, b3}
Как и ожидалось.
Как правило, вы можете создавать подобные выражения при правильном использовании SymbolName
и Symbol
, но будьте осторожны с вашей оценкой. Если бы я написал SymbolName[x]
(без Unevaluated
), то он интерпретировал бы это как SymbolName[{a1, a2, a3}]
, что явно нежелательно. Если вы не используете Evaluate
на Symbol[s1 <> sn]
, Mathematica будет жаловаться на то, что вы пытаетесь переназначить функцию Symbol
.