需要通过使用布尔运算符连接数组的所有元素来创建所有可能的字符串

时间:2013-09-02 14:56:20

标签: arrays perl

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

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

我需要输出如下

X和Y和Z

X和Y或Z

X OR Y OR Z. ..... ....

1 个答案:

答案 0 :(得分: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;
}