On Jan 31, 2010, at 8:35 AM, Gabi wrote:

> Is there any efficient way to get the number of times a given
> function was executed (in run time not during profiling)? Maybe with
> some clever use of its metadata ?

Clojure function calls are low-level operations for efficiency. I'm not aware 
of any easy hook for implementing that kind of profiling in Clojure. If you're 
interested in a particular function, consider dedicating an atom to holding a 
count of its calls and incrementing the value held by that atom on each call:

        user=> (def sqr-call-count (atom 0))
        #'user/sqr-call-count
        user=> (defn sqr [x] (swap! sqr-call-count inc) (* x x))
        #'user/sqr
        user=> (sqr 3)
        9
        user=> @sqr-call-count 
        1
        user=> (def b (map sqr (range 100)))
        #'user/b
        user=> @sqr-call-count ; map is lazy
        1
        user=> b
        (0 1 4 9 16 25 36 ... 9801)
        user=> @sqr-call-count
        101
        user=> 

It's possible such a count could be kept in the function's metadata as you 
suggest. If this kind of count were needed for a large number of functions, I 
would stick with a single atom that held a map from function to count (or var 
to count) that I updated with swap!, update-in, and inc.

--Steve


-- 
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

Reply via email to