Note: I'm actually not talking about hyperoperators below, or map/grep/sort. Just 'for'.
On Sat, 26 Jan 2002 12:32:06 -0600, Jonathan Scott Duff wrote: > @result = for @a; @b -> $a; $b { $a op $b } I'd like to chime in withthe people who have already said that the semicolons are a bit confusing. I'd like to propose a slightly different syntax. Is this maybe valid, or have I missed a gaping problem? # Simplest case: one data source, pulling elements one at a time, # operating against a constant @result = for @a -> ($a) { $a + 2 } More formally, this would be: for LIST -> LIST [[, LIST -> LIST]...] CLOSURE (returns: LIST) So, you could write things like so: # pull elements off two-by-two for @a -> $x, $y { ... } # flatten @a, @b together, pull elements off two-by-two for @a, @b -> $x, $y { ... } # pull one off @a, one off @b for @a -> $x, @b -> $y { ... } # pull one off @a, two off @b for @a -> $x, @b -> $y, $z { ... } Of course, all of these only DWIM if -> knows that it takes exactly one item on the left, and a list on the right. As an extra bit of magic, perhaps, when the only thing to the left of -> is a scalar, it could reduce to this (in Perl5 terms): # This Perl6: for $_ -> $x { ... } # is the same as this Perl5: { my $x = $_; local ($_); { ... } } Dave Storrs