Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 使用ToExpression[]将字符串转换为表达式时,如何防止计算结果?_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica 使用ToExpression[]将字符串转换为表达式时,如何防止计算结果?

Wolfram mathematica 使用ToExpression[]将字符串转换为表达式时,如何防止计算结果?,wolfram-mathematica,Wolfram Mathematica,我有以下字符串: "{f[{-1 + x, y}]; f[{1 + x, y}]; f[{x, 1 + y}]}" 我想把它转换成表达式。直接应用ToExpression只给出最后一个,即{f[{x,1+y}}。如何获取整个列表?您可以查看ToExpression的文档,找到它的第三个参数,并使用 ToExpression["{f[{-1 + x, y}]; f[{1 + x, y}]; f[{x, 1 + y}]}", InputForm, Hold] 防止评估 几个转换表达式或提取部分的

我有以下字符串:

"{f[{-1 + x, y}]; f[{1 + x, y}]; f[{x, 1 + y}]}"

我想把它转换成表达式。直接应用
ToExpression
只给出最后一个,即
{f[{x,1+y}}
。如何获取整个列表?

您可以查看
ToExpression
的文档,找到它的第三个参数,并使用

ToExpression["{f[{-1 + x, y}]; f[{1 + x, y}]; f[{x, 1 + y}]}", InputForm, Hold]
防止评估

几个转换表达式或提取部分的函数(
提取
级别
,等等)可以选择将提取的部分包装到任意函数中。一个常见的用法是将它们包装在
Hold
中,以防止计算


编辑:请注意,您的表达式不是列表。这是一个
复合表达式
。你可能在找

ToExpression["{f[{-1 + x, y}]; f[{1 + x, y}]; f[{x, 1 + y}]}", InputForm, Hold] /. CompoundExpression -> List // ReleaseHold

你能解释一下你想要达到什么目的,以及字符串是从哪里来的吗?

实际上
ToExpression
正在将整个字符串转换成你所期望的表达式。在下面的示例中

In[1]:= ToExpression["a=1;b=2"]
Out[1]= 2

In[2]:= a
Out[2]= 1
您可以看到,第一部分
a=1
作为
复合表达式的一部分得到了正确的计算

您可能需要将用分号分隔的表达式转换为表达式列表。您可以使用StringSplit进行以下操作:

In[3]:= ToExpressionList[s_String] := ToExpression /@ StringSplit[s, ";"]

In[4]:= ToExpressionList["x;y"]
Out[4]= {x,y}
编辑: 看起来您正试图使用分号作为列表 分隔符。在Mathematica中,必须使用
来进行此操作。因此 也可以通过将
替换为
,实现您想要的功能输入
输入字符串,然后应用
进行表达式

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})}

但是,我确实想保留
after
ToExpression
ok,现在我明白了!然后我误解了你的问题。Szabolcs当时给出了正确的答案。我必须指出,在这种上下文中使用字符串通常是脆弱的,尤其是在这种情况下。分号也是
/的一部分
Condition
)操作符,具有明显的后果。在我这样做之后,我在表达式前面得到了
Hold
。在这之后如何摆脱束缚?使用
Apply
?当要计算表达式时,使用
ReleaseHold
删除保持。或者,使用
HoldForm
而不是
Hold
——这类似于Hold,但不显示。@littleEinstein如果你去掉
Hold
,表达式将求值,你将再次得到
{f[{x,1+y}}
。我想你可能对
有误解是。请告诉我们你想要实现什么。我想要实现的是从字符串
“{f[{-1+x,y}];f[{1+x,y}];f[{x,1+y}]}”
到表达式
{f[{-1+x,y}];f[{1+x,y}];f[{x,1+y}
。我正在写一些计算机生成的数学code@littleEinstein如果您生成代码,使用Hold表达式(
Hold
)可能比使用字符串更好。