On Tue, Sep 19, 2006 at 05:38:32PM -0400, Mark J. Reed wrote:
: I have no horse in this race.  My personal preference would be to
: leave grep as "grep".  My second choice is "select", which to me is
: more descriptive than "filter"; it also readily suggests an antonym of
: "reject" to do a "grep -v" (cf. "if !" vs "unless"). But I'd accept
: "filter", too.

But which *ect do we call the one that returns both?  One would like to
be able to say:

    @stuff.direct(
        { .wanted } ==> my @accepted;
        default     ==> my @rejected;
    );

somehow.  Or even:

    @stuff.divvy(
        { .sheep } ==> my @good;
        { .goats } ==> my @bad;
        default    ==> my @ugly;
    );

or maybe the rejected is what is returned:

    @stuff.divert(
        { .sheep } ==> my @good;
        { .goats } ==> my @bad;
    ) ==> my @ugly;

I've put that into parens because I'd like to keep the declarations of
@good and @bad visible.  But there's some way to do it with gather and
a switch statement.

    my (@good, @bad, @ugly) := gather {
        for @stuff {
            when .sheep { @good.take($_) }
            when .goats { @bad.take($_) }
            default     { @ugly.take($_) }
        }
    }

I dunno...at least it emphasizes that the lists are lazily generated...

Anyway, it's not clear to me that grep always has an exact opposite.

Larry

Reply via email to