在Clojure中调试线程宏->或->>

时间:2018-09-30 17:34:33

标签: debugging clojure

我想了解下面针对该问题设计的代码如何工作:“给出一个整数序列,找到一个连续的子序列,以最大化其元素的总和”

defn max-subseq-sum [coll]
(->> (take-while seq (iterate rest coll)) ; tails (1)
   (mapcat #(reductions conj [] %)) ; inits   (2)
   (apply max-key #(reduce + %)))) ; max sum

所以我想看看形式(1),(2)和其他形式的输出。我可以在草书中设置断点,但我不知道如何获取这些值。 我尝试定义一个语言环境变量,例如

(defn max-subseq-sum [coll]
 (->> (take-while seq (iterate rest coll)) ; tails
      (let [d #(reductions conj [] %)]
       d  ) ; inits
      (apply  max-key #(reduce + %)))
 )

(max-subseq-sum [-1, -2, 3, 5, 6, -2, -1, 4, -4, 2, -1])

但是例如,我还是不明白如何看待

如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

有一个不错的图书馆,名为debux

void onPlayerStateChanged(boolean playWhenReady,int playbackState)

答案 1 :(得分:1)

可以将一个打印并返回其输入的简单函数插入到链中:

<Route exact path="/" render={props => (
    <GroupScreen groups={this.state.groups} />
)} />
<Route exact path="/conversation_area" render={props => (
    <h1>bla bla</h1>
)} />

或者,如果您希望更好地跟踪并且不介意太多,可以使用在打印输出中包含表达式的宏:

(defn debug [x]
  (println x)
  x)

(defn max-subseq-sum [coll]
  (->> (take-while seq (iterate rest coll))
       (debug)
       (mapcat #(reductions conj [] %))
       (apply max-key #(reduce + %))))

(max-subseq-sum [-1, -2, 3, 5, 6, -2, -1, 4, -4, 2, -1])
([-1 -2 3 5 6 -2 -1 4 -4 2 -1] (-2 3 5 6 -2 -1 4 -4 2 -1) (3 5 6 -2 -1 4 -4 2 -1) (5 6 -2 -1 4 -4 2 -1) (6 -2 -1 4 -4 2 -1) (-2 -1 4 -4 2 -1) (-1 4 -4 2 -1) (4 -4 2 -1) (-4 2 -1) (2 -1) (-1))
=> [3 5 6 -2 -1 4]