2011-02-17 9 views

Respuesta

4

Rakudo no implementa el lol ("lista de listas") forma, sin embargo, y por lo tanto no puede analizar @a;@b;@c. Por la misma razón, zip no tiene un formulario que todavía contenga tres listas. Claramente, el mensaje de error es menos que impresionante.

Todavía no es realmente una buena solución, pero esto es algo que va a hacer el trabajo:

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

La sintaxis multidimensional (el uso de ; dentro parens) y la cremallera a través de más de dos enumera ambos trabajos, por lo que el código originalmente publicado ahora funciona (si proporciona un código real en lugar del { ... } bloque auxiliar).

Cuestiones relacionadas