trace - 便利なdotraceマクロ
ここしばらくHaskellやAndroidプログラミングに興味を引かれ、Clojureからは遠ざかっていた。blogの更新は5ヶ月ぶりか。月日が経つのは早いなぁ。
print関数を使ってデバッグしていたが、面倒くさくなってきたので、調べてみたら、ClojureでもCommon Lispみたいなtraceマクロがあった。初めから調べておけば良かったよ。
トレース出力を試すためのサンプルコード。特に意味は無いコード。
(defn mul [a b] (* a b)) (defn mul-n [n] (loop [n n sum 0] (if (<= n 0) sum (recur (dec n) (+ sum (mul n n))))))
user> (mul-n 3) 14
mul関数をトレースしてみる。
トレースするにはdotraceマクロを使用する。dotraceの第一引数にはトレースしたい関数名をリストで渡す(複数指定できる)。第二引数以降は評価したい式を渡す。
user> (use 'clojure.contrib.trace) ←◆useして nil user> (dotrace [mul] (mul-n 3)) ←◆トレースする TRACE t2746: (mul 3 3) TRACE t2746: => 9 TRACE t2747: (mul 2 2) TRACE t2747: => 4 TRACE t2748: (mul 1 1) TRACE t2748: => 1 14
これは便利。\(^▽^)/
ここ http://groups.google.com/group/clojure/browse_thread/thread/5553d6ab004ad8a0/3cfe2a8709b43a99 を見ると、他のtraceライブラリの情報あるが、一年以上前の投稿なので、今はもっと良いものがあるかもしれない。