Что значит @@@ в Mathematica? - PullRequest
       51

Что значит @@@ в Mathematica?

16 голосов
/ 17 июля 2009

Я работал над проблемами на Project Euler , и некоторые решения, которые выкладывали другие люди, используют тройной знак, то есть '@@@'. В браузере справки для v7 я нахожу запись для @@ (которая говорит, что это инфиксная версия «Применить»), но нет для @@@. Что это значит?

РЕДАКТИРОВАТЬ: Вот пример, который, я думаю, я могу опубликовать, не нарушая дух Project Euler:

bloc[n_, f_][t_] := {f @@@ #, #~Tr~f} & /@ Join @@ Partition[t, {n, n}, 1];

Ответы [ 3 ]

22 голосов
/ 17 июля 2009

Как уже отмечали другие, технически @@@ является сокращением для 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]}
10 голосов
/ 17 июля 2009

@@@ - это краткая форма для подачи заявки на уровне 1.

f @@@ {{a, b, c}, {d, e}}

эквивалентно

Apply[f, {{a, b, c}, {d, e}}, {1}]

Ссылка: http://reference.wolfram.com/mathematica/ref/Apply.html

Возможно, вам потребуется расширить разделы «Область применения» и «Уровень».

8 голосов
/ 17 июля 2009

f @@@ expr эквивалентно Apply [f, expr, {1}].

documents.wolfram.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...