在clojure中分组一系列bool?

aet*_*ter 3 clojure

我想改变以下顺序:

(def boollist [true false false false true false true])
Run Code Online (Sandbox Code Playgroud)

进入以下:

[[true] [false false false true] [false true]]
Run Code Online (Sandbox Code Playgroud)

我的代码导致Stackoverflow:

(defn sep [boollst]
  (loop [lst boollst
         separated [[]]
         [left right] (take 2 lst)]
    (if (nil? left) separated)
    (recur (next lst) 
           (if (false? left)
             (conj (last separated) left)
             (conj separated [left]))
           (take 2 (next lst)))))
Run Code Online (Sandbox Code Playgroud)

是否有一种优雅的方式来改变这种情况?

dfa*_*fan 5

可能有更优雅的方式,但这就是我提出的方法:

(defn f 
  ([xs] (f xs [] []))
  ([[x & xs :as all] acc a]  
     (if (seq all)
       (if x
         (recur xs [] (conj a (conj acc x)))
         (recur xs (conj acc x) a))
       a)))
Run Code Online (Sandbox Code Playgroud)

它只是遍历序列,跟踪当前的谬误向量,以及迄今为止所有内容的大累加器.