-1

我在 perl 中有一个包含 n 个元素的数组。我需要通过使用所有布尔运算符(例如 AND、OR、NOT)连接所有元素来创建所有可能的字符串。例如,如果

@arr = ('X', 'Y', 'Z');

我需要得到如下输出

X 和 Y 和 Z

X 和 Y 或 Z

X 或 Y 或 Z ......

4

1 回答 1

2

你要

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;
}
于 2013-09-02T20:58:40.903 回答