> Date: Mon, 9 Dec 2002 06:00:40 +0100
> From: =?iso-8859-1?Q?St=E9phane?= Payrard <[EMAIL PROTECTED]>

> Damian: 
> > so it's easy to build up more complex right-to-left pipelines, like:
> > 
> >     (@foo, @bar) :=
> >             part [/foo/, /bar/],
> >                     sort { $^b <=> $^a }
> >                             grep { $_ > 0 }
> >                                     @data;
> > 
> > 
> 
> I would like perl6 to support left-to-right part/sort/grep pipelines.
> Left to right syntax is generally good because it facilitates the flow
> of reading.
> 
> For these pipelines, the current right to left syntax is due to the emphasis
> on the operation over the data operated on, so the operator appears
> first. Nevertheless with a long pipeline, data is best factored out in a
> variable so having it first is not an impediment.
[snip]

I was just playing with Mathematica and thinking this very same thing.
Mathematica has an operator // that applies arguments on the left to
the function on the right.  I was just thinking how good that was for
clarity.  To do some awful computation, and get a numeric result, you
can write:

    N[awful computation]

Or:

    awful computation // N

I was instantly reminded of TMTOWTDI, in a good way.  Perhaps Perl
could adopt a similar mechanism?  The operator in question should have
very low precedence.  >> is available, I think, since bitops are
prefixed with . or whatever.

    $0{statement}{expression}{additive_expression}[0] >> print;

That's rather nicer, IMHO, than:

    print($0{statement}{expression}{attitive_expression}[0]);

You could even give a closure:

    $0{...} >> { print $^v, "\n" }

Not that anyone would.  The situation is analogous to that of:

    die "Can't do it" unless something;

versus

    something or die "Can't do it";

It allows for moving the important stuff out to the left (Depending on
what you consider important).

    @a >> grep { $_ > 0 } >> sort >> { print $^v, "\n"}

Aha! That's when you use the closure.  Unix pipelines are so nice to
script with, why shouldn't Perl steal them? :)


> Also, I  am not necessarily advocating that operators like :=
> could be flipped to become := with flipped operands:
> 
>   @data...grep { $_ > 0 }...sort { $^b <=> $^a }...part [/foo/, /bar/]   =: (@foo, 
>@bar)
> 
> I am just advocating to examine the idea. :)
> I certainly see an imediate problem with the current conventions: 
> =~ and ~= are two different beasts, not one beast and its flipped version.

Yeah... I don't think that would work so well.  There's just too many
operators that have meanings both ways. 

Luke

Reply via email to