perl6 / rakudo: невозможно проанализировать postcircumfix: sym <()> - PullRequest
5 голосов
/ 17 февраля 2011

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

#!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

Ответы [ 2 ]

4 голосов
/ 17 февраля 2011

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;
}
2 голосов
/ 30 ноября 2014

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

...