16

Wolfram Research 至少在过去 8 年中为该函数提供了相同的文档:

Thread[f[args]]

在 args 中出现的任何列表上的“线程”f。

如果我见过一个可爱的圆形定义。

有谁知道实际的语义是什么并且可以提供一个非循环的正确解释?

4

2 回答 2

14

它的工作方式与 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]
于 2009-08-09T00:21:59.217 回答
11

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 来构建规则列表或方程式列表。

于 2009-08-09T00:05:01.007 回答