On Sat, May 25, 2013 at 3:16 PM, Steven Degutis <[email protected]> wrote:
> > Also I just remembered, sometimes to solve the second one, I would do ((if > condition transformer identity) obj) but that feels ugly. > but the condition has to contain obj, so obj is referred twice ? otherwise i kinda like it > > > On Sat, May 25, 2013 at 7:13 AM, Cedric Greevey <[email protected]>wrote: > >> Seems to me that (merge {:attr something} obj) answers the OP's question, >> mentions obj only once, and is short and pithy. OTOH it computes the >> "something" every time, whether it's needed or not, so in cases where >> "something" is expensive to compute (or has side effects that should only >> happen if it winds up in the output!) then another method needs to be used. >> >> >> On Sat, May 25, 2013 at 8:08 AM, atkaaz <[email protected]> wrote: >> >>> like: >>> => (definline pred-transform [obj pred tf] >>> `(let [o# ~obj] >>> (if (~pred o#) o# >>> (~tf o#)))) >>> #'cgws.notcore/pred-transform >>> >>> => (pred-transform (println 1) nil? #(println % ".")) >>> 1 >>> nil >>> => (pred-transform (println 1) #(not (nil? %)) #(println % ".")) >>> 1 >>> nil . >>> nil >>> >>> >>> On Sat, May 25, 2013 at 3:07 PM, atkaaz <[email protected]> wrote: >>> >>>> in which case it does get evaluated twice if form: >>>> => (pred-transform (println 1) #(not (nil? %)) #(println % ".")) >>>> 1 >>>> 1 >>>> nil . >>>> nil >>>> >>>> => (pred-transform (println 1) nil? #(println % ".")) >>>> 1 >>>> 1 >>>> nil >>>> >>>> so maybe a let + gensym would be in order? >>>> >>>> >>>> >>>> On Sat, May 25, 2013 at 3:04 PM, atkaaz <[email protected]> wrote: >>>> >>>>> Shouldn't it be like: >>>>> >>>>> (definline pred-transform [obj pred tf] >>>>> `(if (~pred ~obj) ~obj >>>>> (~tf ~obj))) >>>>> => (pred-transform 1 #(not (nil? %)) println) >>>>> 1 >>>>> => (pred-transform 1 nil? println) >>>>> 1 >>>>> nil >>>>> >>>>> >>>>> >>>>> >>>>> On Sat, May 25, 2013 at 2:55 PM, atkaaz <[email protected]> wrote: >>>>> >>>>>> just wondering if obj is a form does it get evaluated twice? >>>>>> >>>>>> >>>>>> On Sat, May 25, 2013 at 2:51 PM, Jim - FooBar(); < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> no need for macros... :) >>>>>>> >>>>>>> (definline safe-assoc [m k v] >>>>>>> `(if (contains? ~m ~k) ~m >>>>>>> (assoc ~m ~k ~v))) >>>>>>> >>>>>>> (definline pred-transform [obj pred tf] >>>>>>> `(if ~(pred obj) ~obj >>>>>>> ~(tf obj))) >>>>>>> >>>>>>> Jim >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 25/05/13 12:44, atkaaz wrote: >>>>>>> >>>>>>> may I see the macro for the latter, if you decide to go that way ? >>>>>>> thx >>>>>>> >>>>>>> >>>>>>> On Sat, May 25, 2013 at 2:24 PM, Steven Degutis <[email protected] >>>>>>> > wrote: >>>>>>> >>>>>>>> There are two patterns I find in my code that I'm still unhappy >>>>>>>> with but I don't know how to clean up. >>>>>>>> >>>>>>>> The first is: (if (:attr obj) obj (assoc obj :attr something)) >>>>>>>> >>>>>>>> I'm basically saying, give this hash-map an attribute if it >>>>>>>> doesn't already have it. And just return the thing with an attribute, >>>>>>>> regardless if I had to add it or not. >>>>>>>> >>>>>>>> This version is ugly because it repeats obj three times. I could >>>>>>>> write my own macro to de-duplicate it, but I avoid doing that when I >>>>>>>> can >>>>>>>> because there's usually a better built-in solution that I just don't >>>>>>>> know >>>>>>>> about yet. >>>>>>>> >>>>>>>> The second is like it: (if (some-test obj) obj >>>>>>>> (some-transformation obj)) >>>>>>>> >>>>>>>> In this one, I just want to return the object, but maybe >>>>>>>> transform it first. But the reference to obj happens three times! Still >>>>>>>> feels like it could be cleaned up. >>>>>>>> >>>>>>>> Any thoughts on how to clean these up? >>>>>>>> -- >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "Clojure" group. >>>>>>>> To post to this group, send email to [email protected] >>>>>>>> Note that posts from new members are moderated - please be patient >>>>>>>> with your first post. >>>>>>>> To unsubscribe from this group, send email to >>>>>>>> [email protected] >>>>>>>> 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 [email protected]. >>>>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Clojure" group. >>>>>>> To post to this group, send email to [email protected] >>>>>>> Note that posts from new members are moderated - please be patient >>>>>>> with your first post. >>>>>>> To unsubscribe from this group, send email to >>>>>>> [email protected] >>>>>>> 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 [email protected]. >>>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Clojure" group. >>>>>>> To post to this group, send email to [email protected] >>>>>>> Note that posts from new members are moderated - please be patient >>>>>>> with your first post. >>>>>>> To unsubscribe from this group, send email to >>>>>>> [email protected] >>>>>>> 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 [email protected]. >>>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>> >>>> >>> -- >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To post to this group, send email to [email protected] >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> To unsubscribe from this group, send email to >>> [email protected] >>> 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 [email protected]. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >>> >> >> -- >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to [email protected] >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> [email protected] >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to a topic in the >> Google Groups "Clojure" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/clojure/1GFesvqspwk/unsubscribe?hl=en. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > -- > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected] > 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 [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] 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 [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
