Hi,

Am 02.01.2009 um 18:00 schrieb Eric Tschetter:

From the Repl try: (.printStackTrace *e)

The thing is, I want to store the actual *function* not the symbol
referencing the function (the symbol's reference changes after the
macro is evaluated).

1:10 user=> (defmacro tracefn
  "Creates trace logging of calls to a function."
  [function-name]
  `(def ~function-name
     (let [old-function# ~function-name]
       (fn [& args#]
         (println args#)
         (print "  ")
         (let [ret-val# (apply old-function# args#)]
           (println ret-val#)
           ret-val#)))))
nil
1:21 user=> (defn foo [x] (inc x))
#'user/foo
1:22 user=> (macroexpand-1 '(tracefn foo))
(def foo (clojure.core/let [old-function__28__auto__ foo] (clojure.core/fn [& args__29__auto__] (clojure.core/println args__29__auto__) (clojure.core/print " ") (clojure.core/let [ret- val__30__auto__ (clojure.core/apply old-function__28__auto__ args__29__auto__)] (clojure.core/println ret-val__30__auto__) ret- val__30__auto__))))
1:23 user=> (foo 1)
2
1:24 user=> (tracefn foo)
#'user/foo
1:25 user=> (foo 1)
(1)
  2
2

Is that just to give the user flexibility on whether they want to
flush on new line?  Or is there some other reason to choose prn over
println?

1:6 user=> (println "foo")
foo
nil
1:7 user=> (prn "foo")
"foo"
nil
1:8 user=> (println \space)

nil
1:9 user=> (prn \space)
\space
nil

I would prefer prn.

Sincerely
Meikel

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to