The pipe macro is definitely not a new idea btw. It's taken from a thread posted on another lisp group.
Someone posted a silly inflammatory attack on lisp, contrasting unix: "cat a b c | grep xyz | sort | uniq" to how they'd imagine it in lisp: "(uniq (sort (grep xyz (cat a b c))))" A poster called Edward retorted: " (pipe (cat a b c) (grep xyz) (sort) (uniq)) 'Nuff said. " Here's the link, but *not* recommend reading :) http://groups.google.com/group/comp.lang.lisp/browse_thread/thread/d0ce288e1cd22654/cc25683874ecc457 When watching the Abelson and Sussman (SICP) lectures online, when Abelson was using map/filter/reduce etc, he would sometimes explain the code from the inside out, pointing to the most inner part, then working outwards and up. I get the same cognitive overload on seeing lots of nesting. Expanding out onto multiple lines helps, but you still hit a wall. (transform-g (transform-f ... (transform-b) (transform-a) (some-generator)))))))) vs (pipe (some-generator) (transform-a) (transform-b) ... (transform-f) (transform-g) ) The nested form would tell me "it's time to generalise and write a new function". But if using the pipe form I'd happily expand and edit the chain of transforms. It's pretty easy to swap parts of the chain, or disable transforms by commenting them out. The let-> form is really interesting and a nice implementation - pretty amazing to see solution to the general case so quickly. I have the same reservation about using it though, I wouldn't want "x" to mean something different in the same lexical scope. Maybe it's just a case of finding a good name for "x"? Something like "the-evaluation-of- the-previous-form", but shorter.. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---