Hello, so you have a mutating object. To mutate it you must call a method (please note, I don't use the term function, which has a different meaning than a class method, especially in clojure where functions are first class).
You want a final call something like that: (mystery-fn-or-macro object method-to-call list-of-items) If you can afford in your situation of passing a real higher order function to mystery-fn-or-macro , like (fn [obj item] (.method-to-call obj item)), then mystery-fn-or-macro is simply based on doseq : (defn mystery-fn [object fn-calling-method list-of-items] (doseq [item list-of-items] (fn-calling-method obj item))) and you call it as such : (mystery-fn object (fn [obj item] (.method-to-call obj item)) list-of-items) There's also the memfn macro in clojure.core for exactly this purpose: (mystery-fn object (memfn method-to-call item) list-of-items) But note that those days, memfn is somewhat deprecated in favor of raw (fn ...) or #(...) constructs. HTH, -- Laurent 2009/12/15 tristan <tristan.k...@gmail.com> > Hi guys, > > I have a list (which i don't know the size of) and i want to do > something like this: > (doto (MutatingJavaObject.) (.add (first list-items)) (.add (second > list-items)) ..... (.add (last list-items))) > > Now I may be doing this the complete wrong way, so if you have a > better solution please tell me. but i've been trying to build a macro > to expand this out, given the object, the function to call and the > list of items. > > i've been playing with various things, and manage to get a few things > that work if i pass the list of items in without being a list (i.e. (1 > 1 1) rather than '(1 1 1) or (list 1 1 1)) for example (defmacro d2 > [obj func inputs] (concat (list 'doto obj) (map #(list func %) > inputs))) but if i try and pass in my list-items variable it just > complains that it "Don't know how to create ISeq from: > clojure.lang.Symbol". > > perhaps i'm not fully grasping the concept of macros? i'm very new to > lisp and FP in general. > > while writing this email i had a light switch on that i could simply > do it like this: > (let [obj (MutatingJavaObject.)] > (loop [in list-items] > (when (not (empty? in)) > (.add obj (first in)) > (recur (rest in)))) > obj) > but i would still like to know if there is a way i could get the macro > i wanted going. > > please help! my googling and trauling through Stuart Halloway's book > have come up naught. > > thanks in advance! > -Tristan > > -- > 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<clojure%2bunsubscr...@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