Что означает @@@Mathematica?
Я работаю над проблемами Project Euler, а некоторые из решений, которые другие люди публикуют, используют трехзначный знак, т.е. '@@@'. В браузере справки для v7 я нахожу запись для @@(которая говорит, что это инфиксная версия "Применить" ), но для @@@. Что это значит?
EDIT: Вот пример, который, я думаю, могу опубликовать, не нарушая дух Project Euler:
bloc[n_, f_][t_] := {f @@@ #, #~Tr~f} & /@ Join @@ Partition[t, {n, n}, 1];
Ответы
Ответ 1
Как отмечали другие, @@@
является технически сокращенным для Apply
с необязательным третьим аргументом, как это объясняется в документации для Apply
.
Но мне нравится думать о
f @@@ {{a,b}, {c,d}, {e,i}}
как сокращение для
f @@#& /@ {{a,b} {c,d}, {e,i}}
Другими словами, возьмите чистую функцию (стенограмма: ...#...&
), которая делает Apply
(стенограмма: @@
) в список аргументов и Map
(стенограмма: /@
), что список таких списков аргументов.
Результатом является
{f[a,b], f[c,d], f[e,i]}
Ответ 2
@@@- краткая форма для Применить на уровне 1.
f @@@ {{a, b, c}, {d, e}}
эквивалентно
Apply[f, {{a, b, c}, {d, e}}, {1}]
Ссылка: http://reference.wolfram.com/mathematica/ref/Apply.html
Вам может потребоваться развернуть разделы "Область и уровень".
Ответ 3
f @@@expr эквивалентно Apply [f, expr, {1}].
documents.wolfram.com