2009-08-08 4 views

Répondre

11

Le fil est un peu comme une généralisation zip à partir d'autres langages fonctionnels.

Pour les cas simples, où tous les éléments de args de votre exemple sont des listes,

Thread[f[args]] 

est équivalent à

f @@@ Transpose[{args}] 

comme indiqué dans les premiers exemples d'un couple dans la documentation. La principale difficulté est lorsque vous avez des args qui ne sont pas des listes, auquel cas ils sont effectivement curry; par exemple,

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

est équivalent à

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

Je trouve souvent moi-même à l'aide de cette discussion pour construire des listes de règles ou des listes d'équations.

14

Cela fonctionne de manière similaire à la fonction zip() de Python, mais d'une manière un peu plus générale. Par exemple:

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] 
Questions connexes