2009-08-08 7 views
14

Wolfram Research miał taką samą dokumentację dla tej funkcji w ciągu ostatnich 8 lat, co najmniej:Semantyka funkcji wątku Mathematica jest, ktoś musi w końcu umieścić to na odpoczynek

Thread[f[args]] 

„nici” F na wszelkich listach które pojawiają się w argumentach.

Piękna okrągła definicja, jeśli kiedykolwiek widziałem.

Czy ktoś wie, jaka jest rzeczywista semantyka i może dostarczyć odpowiedniego wyjaśnienia, które nie ma charakteru kołowego?

Odpowiedz

11

Nić jest trochę jak uogólnienie zip z innych języków funkcyjnych.

W prostych przypadkach, gdy wszystkie elementy args ze swoim przykładem są listy,

Thread[f[args]] 

jest równoważna

f @@@ Transpose[{args}] 

jak pokazano w pierwszych przykładów para w dokumentacji. Główna zmarszczka jest wtedy, gdy masz argumenty, które nie są listami, w którym to przypadku są skutecznie przekierowywane; na przykład

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

jest równoważna

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

Zwykle znajduję się przy użyciu wątek skonstruować list reguł lub list równań.

14

Działa podobnie jak funkcja Pythona zip(), ale w nieco bardziej ogólny sposób. Na przykład:

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] 
Powiązane problemy