On Dec 15, 1:09 pm, Cedric Greevey <cgree...@gmail.com> wrote:
> On Thu, Dec 15, 2011 at 1:54 PM, Alan Malloy <a...@malloys.org> wrote:
> > This will print all the debug information at compile time, which is
> > usually not what you want. I have a little macro I use called ?, which
> > looks like:
>
> > (defmacro ? [x]
> >  `(let [x# ~x]
> >     (prn '~x '~'is x#)
> >     x#))
>
> > You could add file and line information to this fairly simply:
>
> > (defmacro ? [x]
> >  (let [line (:line (meta &form))
> >        file *file*]
> >    `(let [x# ~x]
> >       (println (pr-str '~x) "is" (pr-str x#)
> >                (str "; (" ~file ":" ~line ")"))
> >       x#)))
>
> > And use it like so:
>
> > user> (let [x 10]
> >        (+ 5 (? x)))
> > x is 10 ; (NO_SOURCE_FILE:1)
> > 15
>
> You might want to change
>
> (pr-str x#)
>
> to something like
>
> (pr-str
>   (if (seq? x#)
>     (let [s (Object.)]
>       (if (= (nth x# 11 s) s)
>         x#
>         (concat (take 10 x#) ['...])))
>     x#))
>
> which will print sequences longer than ten elements as (1 2 3 4 5 6 7
> 8 9 10 ...) and prevent infinite seqs from blowing things up. Or more
> generally you might want to go through pprint which lets you set
> *print-len* and *print-level* to generally control the printing of
> very large and/or deeply-nested structures. But that adds a new
> dependency that needs to be required anywhere you use the macro ...

Good point. I'm surprised this has never bitten me yet. On the other
hand, the fact that it's never bitten me in the like 12 months of
heavy use since I wrote it does lessen my concern that this would be
an issue. However, there's no reason to go through pprint - the
bindable print-foo vars are respected by pr-str.

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