Wolfram mathematica 如何为字符串中给定名称的符号赋值

Wolfram mathematica 如何为字符串中给定名称的符号赋值,wolfram-mathematica,Wolfram Mathematica,给定字符串中某个符号的名称,如何多次为其赋值?例如,假设我想定义一个符号,其名称是varname的值,并给它赋值: varname = "foo" Symbol[varname]=5 这不起作用,因为Mathematica认为您正在尝试为符号赋值,而符号是受保护的。如果foo未定义,则此操作有效: Evaluate[Symbol[varname]]=5 嗯。但它不会第二次起作用: Evaluate[Symbol[varname]]=6 当计算左侧时,其计算结果为5,Mathematica抱

给定字符串中某个符号的名称,如何多次为其赋值?例如,假设我想定义一个符号,其名称是
varname
的值,并给它赋值:

varname = "foo"
Symbol[varname]=5
这不起作用,因为Mathematica认为您正在尝试为符号赋值,而符号是受保护的。如果
foo
未定义,则此操作有效:

Evaluate[Symbol[varname]]=5
嗯。但它不会第二次起作用:

Evaluate[Symbol[varname]]=6
当计算左侧时,其计算结果为5,Mathematica抱怨您试图将值6指定给原始对象5。我想访问作业左侧的符号
foo
,而不是
foo
的值。这能做到吗


提前感谢您提供的任何帮助。

这里有两个方法,用于处理字符串或变量名

i = Function[{f, g}, Clear[f]; Evaluate@Symbol[f] = g];
i["foo", 5];
foo
i["foo", 6];
foo

请参见
ToExpression
Alan
——谢谢。在发布之前,我查看了
ToExpression
,但它一直在评估,直到试图赋值为止。我使用
ToExpression
Hold
作为可选参数找到了答案。此外,这也很有帮助。我稍后会发布更多信息。`varname=“foo”;ToExpression[varname”=5”];阿兰是的,谢谢,那终究会有用的。我在右边使用Evaluate,这需要一个Hold参数。您的方式更简单更好,谢谢。
Chris
是的,谢谢。第一个版本是我感兴趣的,名字在字符串中。它之所以有效,是因为
Clear
不仅可以获取变量名,还可以在字符串常量中获取该名称。这和Alan建议的方法都是很好的解决方案,谢谢。
5
6
h = Function[{f, g}, f = g, {HoldFirst}];
h[foo, 5];
foo
h[foo, 6];
foo
5
6