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

4 wolfram-mathematica

我有以下字符串:

"{f[{-1 + x, y}]; f[{1 + x, y}]; f[{x, 1 + y}]}"
Run Code Online (Sandbox Code Playgroud)

我想将其转换为表达式.直接申请ToExpression只给出最后一个,即{f[{x, 1 + y}]}.如何获得整个列表?

Sza*_*lcs 8

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

ToExpression["{f[{-1 + x, y}]; f[{1 + x, y}]; f[{x, 1 + y}]}", InputForm, Hold]
Run Code Online (Sandbox Code Playgroud)

防止评估.

转换表达式或提取部分(Extract,Level等)的几个函数可以选择将提取的部分包装在任意函数中.常见的用途是将它们包裹起来Hold,以防止评估.


编辑: 请注意,您的表达式不是列表.这是一个CompoundExpression.你可能正在寻找

ToExpression["{f[{-1 + x, y}]; f[{1 + x, y}]; f[{x, 1 + y}]}", InputForm, Hold] /. CompoundExpression -> List // ReleaseHold
Run Code Online (Sandbox Code Playgroud)

你能解释一下你想要实现的目标以及从哪里获得字符串吗?

  • 当您希望表达式进行评估时,使用`ReleaseHold`删除Hold.或者,使用`HoldForm`代替`Hold` - 这就像Hold一样,但不显示. (3认同)
  • @littleEinstein如果你摆脱了'Hold`,表达式将会进行评估,你最终会再次使用`{f [{x,1 + y}]}`.我想你可能会对```有什么误解.请告诉我们您要实现的目标. (2认同)