say [+] 1, 2, 3; # 6
say reduce &[+], 1, 2, 3; # 6
归纳元操作符 []
,将给定的 前缀操作符作用在 一个要归纳的 list
上,
它和 reduce
例程的运算结果一致。
代码示例:
say [+] 1, 2, 3; # 6
say reduce &[+], 1, 2, 3; # 6
在方括号和操作符之间不允许存在空白,要将函数替代操作符, 需要额外的一层括号:
sub plus { $^a + $^b };
say [[&plus]] 1, 2, 3; # 6
list
参数将不会被整平(flattening),这意味着
你可以向归纳操作传递一个内嵌的 list
,执行对 list
的操作:
say [X~] (1, 2), <a b>; # 1, 2 X~ <a b>
默认的情况下,会返回归纳操作的最终结果。
将操作符加上前缀 \
,返回一个所有中间结果的
惰性(lazy)list
,这叫做“三角归纳(triangular reduce)”,
如果元操作符部分已经包含 \
,用一个 []
引用起来(比如 [\[\x]]
)。
my @n = [\~] 1 .. *;
say @n[^5]; # (1 12 123 1234 12345)
对结果执行多个归纳操作可以使用 reduce
:
say reduce $_, 1, 2, 3 for [&[+], &[*]]; # 6 \n 6