Wolfram mathematica 如何将符号名称作为字符串列表获取?

Wolfram mathematica 如何将符号名称作为字符串列表获取?,wolfram-mathematica,tostring,Wolfram Mathematica,Tostring,我可以获得单个符号的名称: ts[s_]:=ToString[Unevaluated[s]]; SetAttributes[ts,HoldAll] 这似乎有效 ss=5; InputForm[ts[ss]] 给予 现在我想将其映射到一个符号列表,但它不起作用,因为我无法抑制对ss的求值: InputForm[ts[#] & /@ {aa, ss}] 给予 如果有任何建议,我将不胜感激。多谢各位 ts[s_] := ToString[Unevaluated[s]] SetAttrib

我可以获得单个符号的名称:

ts[s_]:=ToString[Unevaluated[s]];
SetAttributes[ts,HoldAll]
这似乎有效

ss=5;
InputForm[ts[ss]]
给予

现在我想将其映射到一个符号列表,但它不起作用,因为我无法抑制对ss的求值:

InputForm[ts[#] & /@ {aa, ss}]
给予

如果有任何建议,我将不胜感激。多谢各位

ts[s_] := ToString[Unevaluated[s]]
SetAttributes[ts, HoldAll]
{a, b, c} = {1, 2, 3};
Map[ts, Unevaluated[{a, b, c}]]
{a,b,c}


您也可以使用
ts[s]:=SymbolName[Unevaluated[s]]

StringSplit[StringReplace[ts[{aa,ss}],{“{”->,“}”->,”,“]
返回
{aa”,“ss}
谢谢@Bill。这是一种巧妙地使用字符串操作来实现所需结果的方法。我看了一下我不久前提出的一个相关问题的答案。基于这个答案,我有另一种方法如下:
ts[seq_List]:=Block[seq,ToString/@seq];ts[seq_uz]:=块[{seq},ToString/@{seq}]这将允许ts接受单个符号列表或多个符号作为参数。谢谢@Chris。如果我添加定义
ts[s_List]:=ts/@Unevaluated[s]
,则允许我定义一个函数,该函数接受单个符号或符号名称列表作为参数,而无需将其包装为Unevaluated。您指出的诀窍是在传递到Map之前,将未计算的数据包装到列表中。谢谢您提出了一个更简单的解决方案。如果我只是使ts可列表,映射将是自动的,并且未赋值的参数已经存在,因此
ts[s\u]:=ToString[Unevaluated[s];SetAttributes[ts,{HoldAll,Listable}]
似乎有效。再次感谢。
{"aa", "5"}
ts[s_] := ToString[Unevaluated[s]]
SetAttributes[ts, HoldAll]
{a, b, c} = {1, 2, 3};
Map[ts, Unevaluated[{a, b, c}]]