Wolfram mathematica Mathematica中的符号替换问题

Wolfram mathematica Mathematica中的符号替换问题,wolfram-mathematica,symbols,substitution,Wolfram Mathematica,Symbols,Substitution,我想定义一个符号并在函数中使用它。例如,对于定义为数字列表的IDnumbers: ParallelMap[{#1, Name[#1], Age[#1]} &, IDnumbers] 使用userlist={1,Name[#1],Age[#1]}变为: ParallelMap[userlist &, IDnumbers] 它与代码中的列表本身配合得很好,但与符号配合得不好。字符串列表与指定给字符串列表的符号也会发生同样的情况。这是为什么?因为f[#]和是函数[f[#]]的简写形

我想定义一个符号并在函数中使用它。例如,对于定义为数字列表的IDnumbers:

ParallelMap[{#1, Name[#1], Age[#1]} &, IDnumbers]
使用
userlist={1,Name[#1],Age[#1]}
变为:

ParallelMap[userlist &, IDnumbers]
它与代码中的列表本身配合得很好,但与符号配合得不好。字符串列表与指定给字符串列表的符号也会发生同样的情况。这是为什么?

因为
f[#]和
函数[f[#]]
的简写形式,所以您应该始终使用尾部的
来完成匿名函数,以获得一个工作函数。
在您的示例中:

userlist={#1, Name[#1], Age[#1]}&
ParallelMap[userlist, IDnumbers]
更透彻的解释:

通过使用类似于
f[#]
的东西,您可以得到(在
FullForm[]
中)

然而,这会被后面的
&
运算符转换为函数:

In[16]            := f[#]& // FullForm
Out[16]//FullForm  = Function[f[Slot[1]]]
如果分两步执行此操作,
&
不会计算中间变量
expr

In[25]:= expr = f[#]//FullForm
In[26]:= expr &
Out[25]//FullForm = f[Slot[1]]
Out[26]           = expr &
您可以使用
Evaluate[]
强制计算
expr
,然后再将其包装到
函数[]

In[27]:= expr=f[#]//FullForm
In[28]:= Evaluate[expr]&
Out[27]//FullForm = f[Slot[1]]
Out[28]           = f[Slot[1]]&
另一种方法是自己提供
函数[]
包装器:

userlist={#1, Name[#1], Age[#1]}
ParallelMap[Function[userlist], IDnumbers]
个人而言,我会考虑这种糟糕的编码风格。只要习惯于总是用一个尾随的
&
来完成匿名函数,就像你会给一个相应的开头
)提供一个结尾(

编辑
好的,对于动态生成的匿名函数,我可以理解为什么不能直接提供
&
。只需在
函数[]
中用
槽[]
来包装表达式。

如何在列表括号外添加一个符号?下面是定义userlist的代码,其中hd类似于
{“ID”、“Name”、“Age”}
lll=StringReplace[ToString@hd,“,”->“@#,”];llo=StringReplace[ToString@lll,“ID@”->”];llj=StringDrop[llo,1];llm=StringReplacePart[llj,“@#”,-1];llx=StringSplit[llm,”];llk=StringReplace[llx,“->”];用户列表=ToExpression@llk
很抱歉格式错误!请使用
userlist=Function@ToExpression@llk
用于最后一步。当我在
函数[]
中包装
用户列表时(
ParallelMap[函数[userlist]…
userlist
的元素未被计算。它们被正确地分隔成各自的行和列,但它们仍然读取
Age[#1]
,例如。。。?
userlist={#1, Name[#1], Age[#1]}
ParallelMap[Function[userlist], IDnumbers]