All*_*lly 2 symbols wolfram-mathematica substitution
我想定义一个符号并在函数中使用它.例如,将IDnumbers定义为数字列表:
ParallelMap[{#1, Name[#1], Age[#1]} &, IDnumbers]
Run Code Online (Sandbox Code Playgroud)
随着userlist={#1, Name[#1], Age[#1]}变成:
ParallelMap[userlist &, IDnumbers]
Run Code Online (Sandbox Code Playgroud)
它可以在代码中使用列表本身,但不能使用符号.字符串列表与分配给字符串列表的符号相同.为什么是这样?
既然f[#]&是简写,Function[f[#]]你应该总是用尾随完成你的匿名函数&来获得一个有效的函数.在你的例子中:
userlist={#1, Name[#1], Age[#1]}&
ParallelMap[userlist, IDnumbers]
Run Code Online (Sandbox Code Playgroud)
更彻底的解释:
通过使用像f[#]你这样的东西得到(in FullForm[])
In[15] := f[#] // FullForm
Out[15]//FullForm = f[Slot[1]]
Run Code Online (Sandbox Code Playgroud)
而后者由尾随&运算符转换为函数:
In[16] := f[#]& // FullForm
Out[16]//FullForm = Function[f[Slot[1]]]
Run Code Online (Sandbox Code Playgroud)
如果分两步执行此操作,&则不评估中间变量expr:
In[25]:= expr = f[#]//FullForm
In[26]:= expr &
Out[25]//FullForm = f[Slot[1]]
Out[26] = expr &
Run Code Online (Sandbox Code Playgroud)
您可以expr在Function[]使用Evaluate[]以下内容之前强制进行评估:
In[27]:= expr=f[#]//FullForm
In[28]:= Evaluate[expr]&
Out[27]//FullForm = f[Slot[1]]
Out[28] = f[Slot[1]]&
Run Code Online (Sandbox Code Playgroud)
另一种方法是自己提供Function[]包装:
userlist={#1, Name[#1], Age[#1]}
ParallelMap[Function[userlist], IDnumbers]
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会考虑这种糟糕的编码风格.只是习惯于总是完成一个带有尾随的匿名函数,&就像你将一个关闭的paranthesis )提供给相应的开头一样(.
编辑
确定,在您动态生成匿名函数的情况下,我可以看到为什么您无法&直接提供.只需用Slot[]s中的表达式包装表达式Function[].
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |