perl 6 中是否有用于例程调用的中缀版本?
Is there an infix version for routine invocation in perl 6?
假设我想将函数数组应用于对象数组。像这样:
my $a = sub ($) { $_ * 2 };
my $b = sub ($) { $_ / 2 };
my @funcs = ($a, $b);
my @ops = @funcs.roll(4);
我可以
say ^10 ».&» @ops;
但 .&
is a postfix operator; same thing for >>.,但是可以用于单个函数。使用
say ^10 Z. @ops;
with .
实际上是调用方法的中缀运算符,会产生误认为是连接运算符的错误。我想我别无选择。任何的想法?
您可以使用 &infix:« o »
/ &infix:« ∘ »
运算符,结合 lambda/closure 工厂。
sub lambda-factory ( +in ) {
in.map: -> \_ { ->{_} }
}
my @funcs = (
* * 2,
* / 2
);
(@funcs X∘ lambda-factory ^10)».()
# (0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5)
(@funcs «∘» lambda-factory ^10)».()
# [0, 0.5, 4, 1.5, 8, 2.5, 12, 3.5, 16, 4.5]
( (|@funcs xx *) Z∘ lambda-factory ^10 )».()
# (0, 0.5, 4, 1.5, 8, 2.5, 12, 3.5, 16, 4.5)
如果您已经定义了值,您可以使用中缀运算符andthen
.
say (^10 »andthen» (* * 2, * / 2).roll(4))
如果你推出自己的等同于 .& 的中缀,你试图创建的结构似乎工作正常。
$ perl6 -e 'my sub infix:<foo> ($a, $b) { $b($a) }; say ^10 Z[foo] (-> $_ { $_*2 }, -> $_ { $_/2 }).roll(4);'
(0 0.5 1 6)
假设我想将函数数组应用于对象数组。像这样:
my $a = sub ($) { $_ * 2 };
my $b = sub ($) { $_ / 2 };
my @funcs = ($a, $b);
my @ops = @funcs.roll(4);
我可以
say ^10 ».&» @ops;
但 .&
is a postfix operator; same thing for >>.,但是可以用于单个函数。使用
say ^10 Z. @ops;
with .
实际上是调用方法的中缀运算符,会产生误认为是连接运算符的错误。我想我别无选择。任何的想法?
您可以使用 &infix:« o »
/ &infix:« ∘ »
运算符,结合 lambda/closure 工厂。
sub lambda-factory ( +in ) {
in.map: -> \_ { ->{_} }
}
my @funcs = (
* * 2,
* / 2
);
(@funcs X∘ lambda-factory ^10)».()
# (0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5)
(@funcs «∘» lambda-factory ^10)».()
# [0, 0.5, 4, 1.5, 8, 2.5, 12, 3.5, 16, 4.5]
( (|@funcs xx *) Z∘ lambda-factory ^10 )».()
# (0, 0.5, 4, 1.5, 8, 2.5, 12, 3.5, 16, 4.5)
如果您已经定义了值,您可以使用中缀运算符andthen
.
say (^10 »andthen» (* * 2, * / 2).roll(4))
如果你推出自己的等同于 .& 的中缀,你试图创建的结构似乎工作正常。
$ perl6 -e 'my sub infix:<foo> ($a, $b) { $b($a) }; say ^10 Z[foo] (-> $_ { $_*2 }, -> $_ { $_/2 }).roll(4);'
(0 0.5 1 6)