> It now requires an additional replace-all function (a modified replace):
Oops! No it doesn't. That's from earlier experimentation that I did, and it's not necessary at all with the latest version (you'll see the --> macro doesn't even call it. :-p - Greg On Jul 6, 2010, at 1:58 PM, Greg wrote: >> And it's implementation is not that trivial: > > Excellent point! I've modified --> so that now it's even more versatile and > only evaluates the functions once. > > Now this is possible: > > user=> (--> 1 (+ 1 _) (do (println "sideeffect!") _) (hash-map :a _ :b > (+ 3 _)) :b) > sideeffect! > 5 > > > It now requires an additional replace-all function (a modified replace): > > (defn replace-all > [smap coll] > (if (vector? coll) > (reduce > (fn [v i] > (if-let [e (find smap (nth v i))] > (assoc v i (val e)) > v > )) > coll > (range (count coll)) > ) > (map > #(if-let [e (find smap %)] > (val e) > (if (seq? %) > (replace-all smap %) > % > ) > ) > coll > ) > ) > ) > > (defmacro --> > ([x] x) > ([x form] > (if (seq? form) > `(let [~'_ ~x] ~form) > (list form x) > ) > ) > ([x form & more] > ; cache the result of the first form > (let [_ `(--> ~x ~form)] > `(--> ~_ ~...@more) > ) > ) > ) > > - Greg > > On Jul 6, 2010, at 11:55 AM, Meikel Brandmeyer wrote: > >> Hi, >> >> On Jul 6, 5:47 pm, Stuart Halloway <stuart.hallo...@gmail.com> wrote: >> >>> There is not general agreement that something like --> is more readable. (I >>> for one disagree, at least so far.) >> >> And it's implementation is not that trivial: >> >> user=> (macroexpand '(--> (launch-rockets-if-called-twice) >> (call :first _ :second _))) >> (call :first (launch-rockets-if-called-twice) :second (launch-rockets- >> if-called-twice)) >> >> Maybe there is just not much need for such a macro (at least for me, >> don't for the generality of users). 99% of my use cases can be handled >> with -> or ->> (or a combination there of). >> >> Sincerely >> Meikel >> >> -- >> 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 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