基于切换谓词的组列表

时间:2018-10-28 02:28:07

标签: clojure

我正在尝试分析Clojure中的行列表,并使处理暂停并在pred(line)为真时开始累积,然后在pred2(laterline)为真时停止累积。

例如,如果值是predTrue将返回b,然后使用pred2,当值是{{1}时将返回True。 }

d

我觉得答案肯定比我想出的疯狂事情要简单和惯用。

1 个答案:

答案 0 :(得分:2)

(require '[flatland.useful.seq :refer [partition-between]])
(letfn [(pred [x] (= x 'b))
        (pred2 [x] (= x 'd))]
    (let [A '[a b c d e f g h b d x]]
        (->> A
             (partition-between (fn [[a b]]
                                    (or (pred b)
                                        (pred2 a))))
             (reduce
                 (fn [acc v]
                     (if (pred (first v))
                         (conj acc v)
                         (vec (concat acc v))))
                 []))))

产生:

=> [a [b c d] e f g h [b d] x]