Hey guys, I just came up with some good shit, check this out! (defmacro ->>> ([x] x) ([x alias form] `(let [~alias ~x] ~form)) ([x alias form & more] (let [y `(->>> ~x ~alias ~form)] `(->>> ~y ~@more))))
(->>> "test-string-with-lots-of-dashes" x (s/split x #"-") y (interleave y (range)) z (s/join #"_" z) z (s/join " * " ["I am serious" z "Not Kidding!!" z])) > "I am serious * test_0_string_1_with_2_lots_3_of_4_dashes_5 * Not Kidding!! * test_0_string_1_with_2_lots_3_of_4_dashes_5" So... when are we including it in the core? Cheers, D. On Tuesday, July 6, 2010 11:36:14 PM UTC+1, Greg wrote: > > > As a Lisp newcomer (your trailing parens give you away) > > I'm a newcomer to Clojure, not Lisp. I trail my parens because I think it > results in more readable code, and I'm pretty sure I have good reasons for > thinking so. They will continue to be trailed, and don't bother trying to > suggest otherwise, unless you're interested in hearing me convince you of > how wrong you are. :-) > > > At a glance, people will presume that prints the same thing twice > > [..] > > > _ is an input, then a result. Why give it the same name? > > Now *that's* a reasonable and rational argument against including -->. :-) > > I will point out though, that if you were to just read the code for -> or > ->>, they would also seem counterintuitive until you read the > documentation. They do not follow any standard Lisp calling convention, it > is something that must be understood by reading the docs, and therefore the > same applies to -->. Anyone encountering it would have to read the docs to > understand it. > > Once they read it, I think it becomes intuitive. Again, even The Joy of > Clojure points out that people use commas with -> and ->> to indicate the > location of the parameter. This is no different, except it actually works. > > > In short, this and its variants are not going to get into Clojure > > :-\ > > Thanks for making that clear though, as now people can point others to > response when it comes up again. > > > Please be courteous and let it rest. > > That's my plan, and I think I've done my best to give the same level of > courtesy to others as that I've received. > > - Greg > > On Jul 6, 2010, at 6:17 PM, Rich Hickey wrote: > > > On Jul 6, 2010, at 5:24 PM, Greg wrote: > > > >>> This would be most likely java interop, ie. ->. > >>> There the main arguments are 99% of the times the first or the last > ones. So -> or ->> will work > >> > >> OK, so what happens when one of the functions takes it in the front, > and the other in the back? > >> > >> Or what happens when you're using a piece of code that doesn't follow > either convention? Are you saying such code doesn't exist? > >> > >> In both those cases, -> and ->> become useless. > >> > > > > They simply don't apply. It's not as if nails make screwdrivers useless. > > > > As others have said, this has come up before and been rejected. You'd do > well to heed what other people are saying. As a Lisp newcomer (your > trailing parens give you away), you might presume they have more experience > (though that doesn't make them inherently right). > > > > Your assumption that because it has been asked for before it is > therefore needed is not correct. People ask for things all the time that > they don't need. Often people suggest things as a thought exercise: "what's > the generalization of -> ?" > > > > -> and ->> are simplifications for consistent usages (target value and > sequences respectively). Many functions follow those conventions. When they > don't, or the operations are mixed, it's time to be more explicit, not to > come up with a trickier shorthand. > > > > The bottom line is that --> and let-> are not good ideas, because they > mess up lexical naming badly. Setting aside that _ is idiomatic for "don't > care", consider the counterintuitive behavior of: > > > > (--> 3 (prn _) (prn _)) > > > > At a glance, people will presume that prints the same thing twice. The > name _ is taking on different values with no intervening binding form or > recursion. And anything like let-> that allowed you to name the arg has the > same problem. There is no good name, as the semantics of the parameter > often change with each invocation. I.e. in your original example: > > > > (--> 3 (+ 1 _ 4) (prn "answer:" _)) > > > > _ is an input, then a result. Why give it the same name? > > > > (--> 3 (+ 1 _ 4) (prn "answer:" _)) is not better than: > > > > (let [x 3 a (+ 1 x 4)] (prn "answer:" a)) > > > > and in the latter case you'd never give x and a the same name, never > mind _. > > > > In short, this and its variants are not going to get into Clojure. > Please be courteous and let it rest. > > > > Thanks, > > > > Rich > > > >> > >> On Jul 6, 2010, at 5:20 PM, Meikel Brandmeyer wrote: > >> > >>> Hi, > >>> > >>> Am 06.07.2010 um 20:09 schrieb Greg: > >>> > >>>> On Jul 6, 2010, at 2:01 PM, Stuart Halloway wrote: > >>>> > >>>>> (1) Clojure APIs are very careful about parameter order. > >>>> > >>>> And what if you want to use a function outside of the Clojure API? > >>> > >>> This would be most likely java interop, ie. ->. > >>> > >>>> Or a function *in* the Clojure API that doesn't follow the parameter > order you want? > >>> > >>> There the main arguments are 99% of the times the first or the last > ones. So -> or ->> will work. > >>> > >>>>> (2) -> and ->> encourage chains of operations that build on that > parameter order. > >>>> > >>>> Why is that important? > >>> > >>> Because consistency matters. > >>> > >>>>> (3) I haven't seen a lot of examples where something like --> solves > real problems in code. > >>>> > >>>> I haven't coded long enough in Clojure to provide you with any > examples, but it seems like hoping that the functions you're going to use > are going to have the correct parameter order is silly. Why hope when you > can guarantee it won't matter? > >>>> > >>>> Anyways, you haven't seen a lot of examples simply because people > don't have a --> to use. Thus they're are forced to work around it, for > example by replacing calls to -> or ->> with the corresponding standard > calls (postfix/prefix? don't remember what that style is called). > >>>> > >>>> If it existed, you would see it being used. > >>> > >>> I don't think so. For example sequence or not-empty exist. But I never > needed one of them in two and half years of Clojure coding. And I can't > remember to have seen a single usage in other peoples code. (of course an > absolutely representative sample... ;)) > >>> > >>>> Yes, let's handicap ourselves and then disparage a useful macro as > "unneeded." The -> and ->> macros aren't needed either, so why are they > there? While we're at it, we should make it so that the + function takes > only two arguments because any more leads to "unneeded versatility" and > therefore, apparently, to "support headache." :-p > >>> > >>> Can we tune down the rethoric a little bit? These issues were > discussed in depth several times now. And the fact that such a macro was > not included in core should give a hint, that the pain can't be that big. > >>> > >>> Sincerely > >>> Meikel > >>> > >>> > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to clo...@googlegroups.com<javascript:> > > Note that posts from new members are moderated - please be patient with > your first post. > > To unsubscribe from this group, send email to > > clojure+u...@googlegroups.com <javascript:> > > For more options, visit this group at > > http://groups.google.com/group/clojure?hl=en > > -- -- 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 Note that posts from new members are moderated - please be patient with your first post. 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.