Wolfram Research 至少在过去 8 年中为该函数提供了相同的文档:
Thread[f[args]]
在 args 中出现的任何列表上的“线程”f。
如果我见过一个可爱的圆形定义。
有谁知道实际的语义是什么并且可以提供一个非循环的正确解释?
Wolfram Research 至少在过去 8 年中为该函数提供了相同的文档:
Thread[f[args]]
在 args 中出现的任何列表上的“线程”f。
如果我见过一个可爱的圆形定义。
有谁知道实际的语义是什么并且可以提供一个非循环的正确解释?
它的工作方式与 Python 的函数类似zip()
,但以更通用的方式工作。例如:
In[1] := Thread[{{1, 2, 3}, {4, 5, 6}}] (* f == List *)
Out[1] = {{1, 4}, {2, 5}, {3, 6}}
In[2] := Thread[f[{1, 2, 3}, {4, 5, 6}]]
Out[2] = {f[1, 4], f[2, 5], f[3, 6]}
In[3] := Thread[f[a+b+c, d+e+f], Plus]
Out[3] = f[a, d] + f[b, e] + f[c, f]
Thread 有点像zip
其他函数式语言的概括。
对于简单的情况,您的示例中 args 的所有元素都是列表,
Thread[f[args]]
相当于
f @@@ Transpose[{args}]
如文档中的前几个示例所示。主要的问题是当你的 args 不是列表时,在这种情况下它们会被有效地删除;例如,
Thread[g[{a, b}, c, {d, e}, f]]
相当于
g[#1, c, #2, f]& @@@ Transpose[{{a, b}, {d, e}}]
我通常发现自己使用 Thread 来构建规则列表或方程式列表。