16

我一直在解决Project Euler上的问题,其他人发布的一些解决方案使用三重符号,即'@@@'。在 v7 的帮助浏览器中,我找到了 @@ 的条目(表示它是“应用”的中缀版本),但没有找到 @@@ 的条目。这是什么意思?

编辑:这是一个例子,我认为我可以在不违反 Project Euler 精神的情况下发布:

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

3 回答 3

24

正如其他人所指出@@@的,从技术上讲,它是带有可选第三个参数的简写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]}
于 2009-07-17T06:39:45.833 回答
11

@@@ 是 Apply at level 1 的简写形式。

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

相当于

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

参考:http ://reference.wolfram.com/mathematica/ref/Apply.html

您可能需要扩展范围和级别规范部分。

于 2009-07-17T02:38:20.730 回答
8

f @@@ expr 等价于 Apply[f, expr, {1}]。

文件.wolfram.com

于 2009-07-17T02:34:15.090 回答