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

zipスレッドは、他の関数型言語からの一般化に少し似ています。

例のargsのすべての要素がリストである単純なケースでは、

Thread[f[args]]

と同等です

f @@@ Transpose[{args}]

ドキュメントの最初のいくつかの例に示されているように。主な問題は、リストではない引数がある場合です。この場合、それらは効果的に実行されます。例えば、

Thread[g[{a, b}, c, {d, e}, f]]

と同等です

g[#1, c, #2, f]& @@@ Transpose[{{a, b}, {d, e}}]

私は通常、スレッドを使用してルールのリストまたは方程式のリストを作成しています。

于 2009-08-09T00:05:01.007 に答える