perl6 / rakudo: невозможно проанализировать postcircumfix: sym ‹()›

Почему я получаю это сообщение об ошибке?

#!perl6
use v6;

my @a = 1..3;
my @b = 7..10;
my @c = 'a'..'d';


for zip(@a;@b;@c) -> $nth_a, $nth_b, $nth_c { ... };


# Output:

# ===SORRY!===
# Unable to parse postcircumfix:sym<( )>, couldn't find final ')' at line 9

person sid_com    schedule 17.02.2011    source источник


Ответы (2)


Rakudo еще не поддерживает форму lol («список списков»), поэтому не может анализировать @a;@b;@c. По той же причине zip еще не имеет формы, которая принимает три списка. Ясно, что сообщение об ошибке не очень хорошее.

На самом деле пока нет хорошего обходного пути, но вот кое-что, что поможет:

sub zip3(@a, @b, @c) {
    my $a-list = flat(@a.list);
    my $b-list = flat(@b.list);
    my $c-list = flat(@c.list);
    my ($a, $b, $c);
    gather while ?$a-list && ?$b-list && ?$c-list {
        $a = $a-list.shift unless $a-list[0] ~~ ::Whatever;
        $b = $b-list.shift unless $b-list[0] ~~ ::Whatever;
        $c = $c-list.shift unless $c-list[0] ~~ ::Whatever;
        take ($a, $b, $c);
    }
}

for zip3(@a,@b,@c) -> $nth_a, $nth_b, $nth_c {
    say $nth_a ~ $nth_b ~ $nth_c;
}
person Sol    schedule 17.02.2011

Многомерный синтаксис (использование ; внутри скобок) и zip для более чем двух списков работают, поэтому изначально опубликованный код теперь работает (если вы предоставите реальный код, а не блок-заглушку { ... }).

person raiph    schedule 30.11.2014