Thanks all for responding. Ram – Appreciate both versions, but I need to use it with regular functions created with `defn`.
Rostislav – I need to do this in a regular function created using `defn`; not sure how can I use named let in this case. Am I missing something? Steve – Your example is already compact, but maybe it can be made even cheaper by specifying maxDepth of 1: http://docs.oracle.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html#getThreadInfo(long, int) Shantanu On Mar 28, 10:18 pm, Ram Krishnan <kriyat...@gmail.com> wrote: > On Wednesday, March 28, 2012 at 9:15 AM, Shantanu Kumar wrote: > > > On Mar 28, 8:57 pm, Ram Krishnan <kriyat...@gmail.com (http://gmail.com)> > > wrote: > > > Did you just need the name of the function? something like this? > > > Sorry, I should explained using code what I am looking for: > > > (defmacro find-name [] > > ;; some magic here > > ..) > > > (defn foo [] > > .. > > (println (find-name)) ; should print "foo" > > ..) > > > I am looking for a way to write the `find-name` macro. So, you can see > > I want to use it with regular functions defined using `defn`. > > If you can't use a specialized `defn` you could try something like the > following, assuming that you need this for just a temporary while (say during > development): > > ---------------->8----8<---------------- > > (def ^{:dynamic true} *myself* nil) > (defn find-name [] *myself*) > > (defmacro trace [sym] > `(let [old# ~sym] > (def ~sym (fn [& args#] > (binding [*myself* '~sym] > (apply old# args#)))))) > > (defn foo [a b] [(find-name) (+ a b)]) > > (foo 1 2) => [nil 3] > > (trace foo) > > (foo 1 2) => [foo 3] > > ---------------->8----8<---------------- > > It requires you explicitly `trace` the functions within which you want to > call `find-name`, otherwise the name will just be `nil`. > > > > > > > > > > > Shantanu > > > -- > > 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 > > (mailto: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 > > (mailto: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