なぜClojureを学ぶのか、各ステップで関数が何をするのかを確認する必要がある場合があります。例えば:
(defn kadane [coll]
(let [pos+ (fn [sum x] (if (neg? sum) x (+ sum x)))
ending-heres (reductions pos+ 0 coll)]
(reduce max ending-heres)))
println
あちこちに挿入する必要があります(どこに、どのように)。または、推奨されるワークフロー/ツールはありますか?
これは、単一の関数のレベルで求めているものではないかもしれませんが(以下のCharles Duffyのコメントを参照)、名前空間(または複数)のレベルで何が起こっているのかを概観したい場合は、tools.traceを使用してください(開示:私は寄稿者です):
(ns foo.core)
(defn foo [x] x)
(defn bar [x] (foo x))
(in-ns 'user) ; standard REPL namespace
(require '[clojure.tools.trace :as trace])
(trace/trace-ns 'foo.core)
(foo.core/bar 123)
TRACE t20387: (foo.core/bar 123)
TRACE t20388: | (foo.core/foo 123)
TRACE t20388: | => 123
TRACE t20387: => 123
(Charlesが指摘したように)内部関数などをキャッチせず、大きなコードグラフでは圧倒される可能性がありますが、小さなコードグラフを探索する場合は非常に便利です。
(対象のグループが名前空間と完全に一致していない場合は、個別に選択された変数をトレースすることもできます。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加