Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

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.

Replies are listed 'Best First'.
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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://28300]
[Lady_Aleena]: My biggest problem with hashes at the moment is one with 2,501 keys.
[choroba]: how many event types are there?
[Corion]: Also I found that I can't conveniently weaken an array slot, which also is inconvenient, as I want my one-shots to disappear if the caller discards them
[Corion]: choroba: Currently two or three that my program handles (WWW::Mechanize:: Chrome), but there might be more that become interesting
[Corion]: But I don't expect more than 100 to be active at the same time, so I'm not really sure if there is a not-too-fancy data structure that is maintained with few lines of code where the performance is better than the linear scan ;)
[Corion]: But I should do a mock-up program so that others can see what I'm talking about ;)
[robby_dobby]: Corion: I hope you know all too well that passing around "fancy" datastructures is a recipe for disaster :-)
[robby_dobby]: As in, it's-too-fancy- that-it-will-be- messy-to-handle
[choroba]: bit vectors as keys?
[robby_dobby]: Hmm, I keep falling asleep at my desk, while maintaining an active appearance. Am I getting old?

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (10)
As of 2017-05-29 08:01 GMT
Find Nodes?
    Voting Booth?