On Thursday, November 6, 2014 8:48:07 PM UTC-5, blake wrote:
>
> I wanted to put the delimiters in one step and then split in a different 
> one, so I did this:
>
> (defn delimit[v]
>   (reduce #(if (= (last %) (dec %2))
>             (conj % %2)
>             (conj % :split %2))
>         [(first v)] (rest v)))
>
> (delimit [1 3 4 5 7 9 10 11 12])
> => [1 :split 3 4 5 :split 7 :split 9 10 11 12]
>
> But that was before I realized there was no equivalent to 
> clojure.string/split that works on lists.
> ​
>

Oooh, that's a good idea. Thanks. It's easy enough to split after you've 
added those markers/gaps in:

~~~clojure
#!/usr/bin/env lein-exec

(def v [1 3 4 5 7 9 10 11 12])

(defn insert-gaps
  [coll]
  (reduce (fn [accum x]
            (if (= x (inc (last accum)))
              (conj accum x)
              (conj accum :gap x)))
          [(first coll)]
          (rest coll)))

(defn congeal-consecutives
  "Assumes coll has :gaps."
  [coll]
  (let [res (partition-by (fn [x]
                            (= x :gap))
                          coll)]
    (remove (fn [x]
              (= x '(:gap)))
            res)))

(prn (congeal-consecutives (insert-gaps v)))
~~~
 

-- 
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.

Reply via email to