Michael Lazzaro <[EMAIL PROTECTED]> writes: > On Wednesday, December 11, 2002, at 06:56 PM, Simon Cozens wrote: > > [EMAIL PROTECTED] (Michael Lazzaro) writes: > >> Welllll... yes and no. You can make the same argument for operators > >> upon scalars, for example, since 'scalar' is arguably no more > >> universal than 'array'. And we could easily use that argument to > >> remove *all* builtins, period: > > > > Now you're getting the idea. > > Yes. But Java sucks. Me no like make Perl like Java. > > I would still like to be able to do things in Perl6 like: > > @out = sort map {...} grep { ... } @in; # [1] > > Even though that technically means having sort, map, grep as builtins. > > We can make that > > @out = @in.grep({...}).map({...}).sort; # [2] > > if we want to grind our OO axe, but I find that syntax disappointing. > I like that the idea is important enough in Perl to have it's own > grammar, but I realize the problem of namespace pollution involved in > having a bunch of builtins called grep, map, whatever. > > The only encompassing solution would seem to be to find a grammar rule > by which map,grep,etc are unambiguously methods of Array, but can > still be called in a fashion similar to [1]. That would, I suspect, > satisfy everyone.
What's wrong with: class Array { method grep ( &block ) { foreach .values { yield $_ if &block($_); } } method grep ( Rule $rule ) { foreach .values { yield $_ if /$rule/; } } ... } sub grep (Object $obj, @*ary) { @ary.grep($obj); } AFAICT, (modulo getting the laziness done right, this should allow you to write) grep { ... } @ary; grep /.../, @ary; Writing the grep foo($_), @ary form in Perl 6 is left as an exercise to the interested reader, I get the feeling it's going to have to wait until you can write 'special form' subs. sub grep ( rx/<expr>/ $expr, @*ary ) { grep $expr.as_block, @ary } Might be one approach, but I'm waiting for Larry.