我正在尝试分析Clojure中的行列表,并使处理暂停并在pred(line)
为真时开始累积,然后在pred2(laterline)
为真时停止累积。
例如,如果值是pred
,True
将返回b
,然后使用pred2
,当值是{{1}时将返回True
。 }
d
我觉得答案肯定比我想出的疯狂事情要简单和惯用。
答案 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]