Here's a version with reduce. It returns your elements as sets, but you could 
easily (map seq ,,,) if you really need lists.

user=> (reduce (fn [r e] (if ((last r) e) (conj r #{e}) (update-in r [(dec 
(count r))] conj e))) [#{}] [1 2 2 3 4 4 1 6])    
[#{1 2} #{2 3 4} #{1 4 6}]

Cheers, Jay

On Mar 30, 2012, at 4:29 AM, David Jagoe wrote:

> On 29 March 2012 21:41, Cedric Greevey <cgree...@gmail.com> wrote:
>> 
>> On Thu, Mar 29, 2012 at 4:18 PM, David Jagoe <davidja...@gmail.com> wrote:
> 
>>> Given a sequence like this: [1 2 1 2 1 1 2 1 2 2 2]
>>> 
>>> partition it to get this: [(1 2) (1 2) (1) (1 2) (1 2) (2) (2)]
>>> !
>> 
>> (defn partition-distinct [s]
>>  (lazy-seq
>>    (loop [seen #{} s (seq s) part []]
>>      (if s
>>        (let [[f & r] s]
>>          (if (seen f)
>>            (cons (seq part) (partition-distinct s))
>>            (recur (conj seen f) r (conj part f))))
>>        (if-let [part (seq part)]
>>          (list part))))))
>> 
> 
> Thanks! I had a nasty feeling that it could be done in a one-liner
> using partition-by or something similar. But of course you need to be
> able to look at previous elements...
> 
> -- 
> 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 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

Reply via email to