我在 perl 中有一个包含 n 个元素的数组。我需要通过使用所有布尔运算符(例如 AND、OR、NOT)连接所有元素来创建所有可能的字符串。例如,如果
@arr = ('X', 'Y', 'Z');
我需要得到如下输出
X 和 Y 和 Z
X 和 Y 或 Z
X 或 Y 或 Z ......
你要
for (qw( AND OR )) {
for (qw( AND OR )) {
...
}
}
其中嵌套的数量与 中的元素数量成正比@arr
。当您想要任意数量的嵌套循环时,您需要NestedLoops
.
use Algorithm::Loops qw( NestedLoops MapCar );
my $ops = [qw( AND OR )];
my $iter = NestedLoops([ ($ops) x $#arr ]);
while (my @ops = $iter->()) {
say join ' ', MapCar { @_ } \@arr, \@ops;
}
你也可以这样写
use Algorithm::Loops qw( NestedLoops );
my $ops = [qw( AND OR )];
my @loops = map { [ $_ ], $ops } @arr;
pop(@loops);
my $iter = NestedLoops(\@loops);
while (my @expr = $iter->()) {
say join ' ', @expr;
}