我正在尝试使用Junction
从List::Util::all
复制我在Perl中习惯的行为。
我在以下语句中使用all
结点:
# does not work
return not know(@possible-dates) and not know tell day all(@possible-dates);
不知道这些函数是做什么的,我假设这个陈述等同于以下内容:
# works
my Bool $r = not know @possible-dates;
for @possible-dates -> $date {
$r = $r && not know tell day $date;
}
return $r;
for循环版本返回正确的结果,结点版本没有,我试图理解原因。
下面的完整代码告知所有功能的作用:
my @dates = <May 15>, <May 16>, <May 19>, <June 17>, <June 18>,
<July 14>, <July 16>, <August 14>, <August 15>, <August 17>;
sub day (@date) { @date[1] }
sub month (@date) { @date[0] }
sub tell($data) {
@dates.grep({ day($_) eq $data or month($_) eq $data });
}
sub know(@possible-dates) { @possible-dates.elems == 1 }
sub statement-one(@date) {
my @possible-dates = tell month @date;
# why is this not the same as below?
return not know(@possible-dates)
and not know tell day all(@possible-dates);
# my Bool $r = not know @possible-dates;
# for @possible-dates -> $date {
# $r = $r && not know tell day $date;
# }
#
# return $r;
}
sub statement-two(@date) {
my @possible-dates = tell day @date;
not know(@possible-dates)
and know @possible-dates.grep(&statement-one);
}
sub statement-three(@date) {
my @possible-dates = tell month @date;
know @possible-dates.grep(&statement-two);
}
sub cheryls-birthday() {
@dates.grep({
statement-one($_)
and statement-two($_)
and statement-three($_)
});
}
say cheryls-birthday();
答案 0 :(得分:7)
我想最简单的答案是做一个
zef install List::Util
然后输入:
use List::Util 'any';
你的代码中的。 Perl 6 any
与any
之间存在一些细微差别,其中http://modules.perl6.org/dist/List::Util:cpan:ELIZABETH提供了Perl 5语义。
在Perl 6中,any
返回Junction
个对象。在Perl 5中any
是一个函数,您可以在列表上调用一个块来执行。