在Perl 6中连接列表

时间:2017-12-27 22:49:38

标签: perl6

我正在寻找一个更简单的解决方案。

我有一个前缀列表,其中包含对应的后缀和一个根列表。

my @prefixes = 'A'..'E';
my @suffixes = 'a'..'e';
my @roots = 1, 2;

我想制作所有可能的“字词”:A1aB1b ... A2a ... E2e

my @words;
for @roots -> $r {
    for @prefixes.kv -> $i, $p {
        my $s = @suffixes[$i];
        my $word = [~] $p, $r, $s;
        @words.push: $word;
    }
}
say @words; # [A1a B1b C1c D1d E1e A2a B2b C2c D2d E2e]

我认为使用zipcross之类的内容可以更轻松,但无法弄清楚如何...

2 个答案:

答案 0 :(得分:10)

我的解决方案是:

say @roots.map: |(@prefixes >>~>> * <<~<< @postfixes);

为metaopping连接创建一个WhateverCode,滑动结果以获得最后只有标量值的Seq

答案 1 :(得分:8)

还有几种写作方式:

say @roots X[&join] (@prefixes Z @suffixes);
say @roots.map({ |(@prefixes Z @suffixes)».join($_) });
say @roots.map({ (@prefixes X~ $_) Z~ @suffixes }).flat;
say (|@prefixes xx *) Z~ (@roots X~ @suffixes);
my @formats = (@prefixes Z @suffixes).flat.map(* ~ '%s' ~ *);
say @formats X[&sprintf] @roots;

(注意:这个以不同的顺序打印它们。)

say do for @roots -> $root {
    |do for (@prefixes Z @suffixes) -> [$prefix, $suffix] {
        $prefix ~ $root ~ $suffix
    }
}