На самом деле ToExpression
преобразует всю строку в выражение, как вы ожидаете.В следующем примере
In[1]:= ToExpression["a=1;b=2"]
Out[1]= 2
In[2]:= a
Out[2]= 1
вы можете видеть, что первая часть a=1
была правильно оценена как часть CompoundExpression
.
. То, что вы, вероятно, хотите, - это преобразовать ваши выражения, разделенныечерез точку с запятой в список выражений.Вы можете использовать StringSplit для этого:
In[3]:= ToExpressionList[s_String] := ToExpression /@ StringSplit[s, ";"]
In[4]:= ToExpressionList["x;y"]
Out[4]= {x,y}
Редактировать: Похоже, вы пытаетесь использовать точку с запятой в качестве разделителя списка. В Mathematica вам придется использовать ,
для этого. Так что вы также можете достичь желаемого, заменив ,
на ;
в вашей строке, а затем применив ToExpression
впоследствии:
In[20] := ToExpression @
StringReplace[
"{f[{-1 + x, y}]; f[{1 + x, y}]; f[{x, 1 + y}]}",
";" -> ","
]
Out[20] = {f({x-1,y}),f({x+1,y}),f({x,y+1})}