I think what you want is `partition-between` as implemented by amalloys useful lib (https://github.com/amalloy/useful/blob/develop/src/flatland/useful/seq.clj#L224 <https://github.com/amalloy/useful/blob/develop/src/flatland/useful/seq.clj#L224>).
`(partition-between (fn [x y] (not= (inc x) y)) coll)` Why this isn’t in the standard library is beyond me tbh, as `partition-by` is a special case for `partition-between`. `(def partition-by (partial partition-between not=))` Maybe adding it to clojure.core should be considered? Also I’d be intrigued to know the rationale behind `partition-by`. Cheers, Jan > On 07 Nov 2014, at 18:56, Alex Hammel <ahamme...@gmail.com> wrote: > > Here's my take on the 'add delimiters and split' approach. Bonus `congeal > function, which chunks collections on any condition you like: > > (defn- insert-gaps > [coll pred gap-symbol] > (reduce (fn [acc x] > (if (pred (peek acc) x) > (conj acc x) > (conj acc gap-symbol x))) > [(first coll)] > (rest coll))) > > (defn split-coll > [coll delimiter] > (->> coll > (partition-by (partial = delimiter)) > (remove (partial = (list delimiter))))) > > (defn congeal > [pred coll] > (let [gap-symbol (gensym)] > (-> coll > (insert-gaps pred gap-symbol) > (split-coll gap-symbol)))) > > (defn consecutive? [p q] > (= (inc p) q)) > > (println (congeal consecutive? [1 3 4 5 7 9 10 11 12])) > #=> ((1) (3 4 5) (7) (9 10 11 12)) > (println (congeal < [1 2 3 1 2 3 1 2 3])) > #=> ((1 2 3) (1 2 3) (1 2 3)) > (println (congeal not= [:foo :foo :bar :bar :foo :bar])) > #=> ((:foo) (:foo :bar) (:bar :foo :bar)) > > > > > On Fri, Nov 7, 2014 at 4:09 AM, Paweł Rozynek <pro...@gmail.com > <mailto:pro...@gmail.com>> wrote: > (def data '(1 3 4 5 7 9 10 11 12)) > (map #(map last %) (partition-by #(apply - %) (map-indexed vector data))) => > ((1) (3 4 5) (7) (9 10 11 12)) > > regards > PR > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > <mailto:clojure@googlegroups.com> > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > <mailto:clojure%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > <http://groups.google.com/group/clojure?hl=en> > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com > <mailto:clojure+unsubscr...@googlegroups.com>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > <http://groups.google.com/group/clojure?hl=en> > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com > <mailto:clojure+unsubscr...@googlegroups.com>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.