Debug Technics

なんにせよ、プログラミングにデバッグはつきもの。
先人の知恵をリンク。

Debugging in Clojure

http://stackoverflow.com/questions/2352020/debugging-in-clojure

トレースの使い方
(use 'clojure.contrib.trace)
(defn fib[n] (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2)))))
(dotrace [fib] (fib 3))

; for Clojure1.2
(use 'clojure.contrib.trace)
(defn fib[n] (if (< n 2) n (+ (#'fib (- n 1)) (#'fib (- n 2)))))
(dotrace [fib] (fib 3))
debugマクロ
I have a little debugging macro that I find very useful:

;;debugging parts of expressions
(defmacro dbg[x] `(let [x# ~x] (println "dbg:" '~x "=" x#) x#))
You can insert it wherever you want to watch what's going on and when:

;; Examples of dbg
(println (+ (* 2 3) (dbg (* 8 9))))
(println (dbg (println "yo")))
(defn factorial[n] (if (= n 0) 1 (* n (dbg (factorial (dec n))))))
(factorial 8)

(def integers (iterate inc 0))
(def squares  (map #(dbg(* % %))   integers))
(def cubes    (map #(dbg(* %1 %2)) integers squares))
(take 5 cubes)
(take 5 cubes)

debug-repl

https://github.com/GeorgeJahad/debug-repl
実行時に値を表示してくれる。