yazz.com
yazz.com

Reputation: 58786

How can I pretty print a quoted list in clojure?

Given a list like:

(quote (do (println "Hello") (println "Goodbye")))

: how can I turn this into a nicely formatted string which will output something like:

(do
  (println "Hello") 
  (println "Goodbye")
)

Upvotes: 5

Views: 1107

Answers (2)

Michał Marczyk
Michał Marczyk

Reputation: 84341

As a significantly more performant alternative to clojure.pprint, you might want to try Brandon Bloom's fipp:

;; add [fipp "0.4.0"] to :dependencies
(require '[fipp.edn :as fipp])

(fipp/pprint '(do (println :foo) (println :bar) (println :quux))
             {:width 30}) ; force wrapping despite small size of data
;; printed output:
(do
 (println :foo)
 (println :bar)
 (println :quux))

Unfortunately, Fipp does not yet support code-dispatch.

Upvotes: 5

Leon Grapenthin
Leon Grapenthin

Reputation: 9266

Use clojure.pprint/write with clojure.pprint/code-dispatch:

(clojure.pprint/write '(do (println "Hello") (println "Goodbye"))
                      :dispatch clojure.pprint/code-dispatch)

For that small amount of code you won't get new-lines. But a call like this

(clojure.pprint/write '(do (println "Hello") (println "Goodbye") (println "Hey, you left me out!"))
                      :dispatch clojure.pprint/code-dispatch)

Returns

=> (do
     (println "Hello")
     (println "Goodbye")
     (println "Hey, you left me out!"))

To catch that as a string wrap the call in (with-out-str ...)

Upvotes: 8

Related Questions