2009-08-08 9 views
14

Wolfram Researchのは、最後の8年間、少なくとも、この機能のために同じ文書を持っていた残りの部分にこれを入れている必要があります任意のリストの上にFセマンティクス、誰かがついに

Thread[f[args]] 

「スレッド」 argsに表示されます。

私が今まで見たことがあるなら、美しい円形の定義。

誰もが実際のセマンティクスを知っていて、非円形の適切な説明を提供できますか?

答えて

11

スレッドは、他の機能言語の一般化zipのようなビットです。

ドキュメントの最初のカップルの例に示すように、あなたの例から、引数のすべての要素がリストされている簡単な例については、

Thread[f[args]] 

f @@@ Transpose[{args}] 

に相当します。大きな問題は、あなたがリストではないargを持っている場合です。その場合、それらは事実上カドになります。例えば、

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

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

私は通常のルールや方程式のリストのリストを構築するためにスレッドを使用して自分自身を見つけることと等価です。

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] 
関連する問題