Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

RE (tilly) 1: Schwartzian Transform

by tilly (Archbishop)
on Aug 17, 2000 at 19:12 UTC ( #28300=note: print w/ replies, xml ) Need Help??


in reply to Schwartzian Transform

We discussed this one once. When you did it, it was not a big deal at the time as far as you were concerned. I absolutely understood.

This falls out as a natural consequence of starting to think about Perl as a list-oriented language (which it is) instead of thinking like you would in C. It has often been mentioned that Perl is the Cliff Notes of Unix. Well that includes the value of thinking in terms of hooking together a bunch of trivial little filters into a pipeline.

That is exactly you were doing.

Unfortunately in Perl the syntax makes a pipeline read the wrong way. But let us use a fake notation where |> means "pipe to", what you are doing is the same as:

@input |> map {[$_, &expensive_func($_)} |> sort { $a->[1] cmp $b->[1] } |> map {$_->[0]} |> my @output;
And now, written in a pseudo imitation of a Unix pipeline where actions naturally read in the same order they execute in, my analogy to a Unix pipeline should be clear.

For the record I often mentally write filters in a pseudo pipeline like the above, you apparently write them bottom to top. Either way anyone who gets past the notational issue and thinks "Unix pipeline" not only will find the Schwartzian sort trivial, they will also get a lot of insight into how to effectively use the underlying key idea for a wide variety of problems.


Comment on RE (tilly) 1: Schwartzian Transform
Download Code
Re: RE (tilly) 1: Schwartzian Transform
by I0 (Priest) on Jan 04, 2001 at 19:26 UTC
    But let us use a fake notation where |> means "pipe to",
    perl v6.0?
      I have no idea if it is under consideration. Probably not. I suggested it on p5p once to decidedly mixed reviews.

      I note that in many other languages similar algorithms are naturally coded as chained method calls, and that winds up reading left to right...

        I advocated a list-dereference syntax to fairly positive reviews in p5p, but I doubt anyone will find the tuits to actually implement it. It would allow an entire list to be passed to a method, like map, or to dereference multi-dimensional slices of nested data structures:

        @3dSlice= $ref->@==>{qw(a b c)}==>[1..5]; $obj->GetAttribs()==>Stringify()==>Dump();
        The choice of token was not solidified. (Or was your |> mentioned in that thread as well?)

                - tye (but my friends call me "Tye")
      perl v6.0?
      yep! Guess they liked '==>'.

      ---
      "A Jedi uses the Force for knowledge and defense, never for attack."

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://28300]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (5)
As of 2014-08-21 09:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (129 votes), past polls