P07 - 将嵌套数组结构扁平化。

作者:Johan Viklund

我们使用 gather/take 结构。

gather 块使用 take 语句构建列表。每个 take 语句都会向列表中添加一个元素。gather 块返回完整的列表。

gather 块使用动态作用域,因此 take 语句可以位于另一个子例程中。

  • for @t -> $t

迭代 @t,将每个元素依次放入 $t

  • ~~

是智能匹配运算符。这里我们使用它来检查 $t 的类型。我们也可以使用 $t.isa(Array)

规范

P07 (**) Flatten a nested array structure.
    Transform an array, possibly holding arrays as elements into a `flat'
    list by replacing each array with its elements (recursively).

示例

> splat([1,[2,[3,4],5]]).perl.say;
(1, 2, 3, 4, 5)

源代码:P07-viklund.pl

use v6;

sub _splat(@t) {
    for @t -> $t {
        if $t ~~ Array { _splat($t) }
        else           { take $t }
    }
}

sub splat (@t) { gather _splat(@t) }

splat([1, [2,[3,4], 5]]).list.perl.say;