For reference, here's a version I wrote while I was working on cl- format and the pretty printer:
(defn prerr [& args] "Println to *err*" (binding [*out* *err*] (apply println args))) (defmacro prlabel [prefix arg & more-args] "Print args to *err* in name = value format" (cons 'prerr (cons (list 'quote prefix) (mapcat #(list (list 'quote %) "=" %) (cons arg more- args))))) It prints a label (which is a string, but the macro quotes it for you and a set of forms you want to print. Using the above example, this would be (prlabel foo (+ 1 2)) and it would print: foo (+ 1 2) = 3 A real example from the PrettyWriter is: (prlabel tf? (.getColumn this) (buffer-length tokens)) I make sure the output goes to *err* partially because that just seems right for trace output and partially because cl-format tends to have *out* bound at its whim. Tom On Mar 24, 8:32 am, Joshua Fox <joshuat...@gmail.com> wrote: > Eric Rochester has a debug macro, together with a walkthrough of how he > built it, > herehttp://writingcoding.blogspot.com/2008/09/stemming-part-19-debugging.... > > Joshua > > On Tue, Mar 24, 2009 at 4:43 PM, Mark Volkmann > <r.mark.volkm...@gmail.com>wrote: > > > > > I want to write a function or macro that allows me to output the value > > of an expression without repeating it. For example, I want something > > like (dump (+ 1 2)) to output "(+ 1 2) = 3". > > > This works. > > > (defn dump1 [string] > > (println string "=" (load-string string))) > > (dump1 "(+ 1 2)") > > > Note how I had to put the expression passed to dump1 in quotes to make a > > string. > > > I'm wondering if there is a way to avoid that using a macro. The hard > > part is printing the expression. The following doesn't work. It > > outputs "3 = 3". > > > (defmacro dump2 [expr] > > `(let [value# ~expr] > > (pr ~expr) > > (println " =" value#))) > > (dump2 (+ 1 2)) > > > -- > > R. Mark Volkmann > > Object Computing, Inc. --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---