Hi everyone, Does anyone know of a straightforward way to get something like clojure.math/combinatorics/partitions that works more like partition in the core library, that is, that only selects partitions with adjacent elements?
In other words, right now this is the problem: (require '[clojure.math.combinatorics :as c]) (c/partitions [:a :b :c] :min 2) => (([:a :b] [:c]) ([:a :c] [:b]) ([:a] [:b :c]) ([:a] [:b] [:c])) But that ([:a :c] [:b]) there in the second position isn't a proper partition because :a and :c aren't adjacent in the original vector. I feel like there's got to be a standard, canonical solution for this, or some existing sequence or combinatorics function with a funny name that just returns (([a :b] [:c]) ([:a] [:b :c]) ([:a] [:b] [:c])) in this situation. I just don't know it... The best I can come up with is kind of a hackish workaround that only works when the original vector is sorted, namely, flattening all the partitions and testing to see whether they are sorted too, i.e.: (require '[clojure.math.combinatorics :as c]) (defn test-fn [part] (let [f (flatten part)] (= f (sort f)))) (filter test-fn (c/partitions [:a :b :c] :min 2)) => (([:a :b] [:c]) ([:a] [:b :c]) ([:a] [:b] [:c])) ; Yay! :-) And that works, but, as noted, only when the original vector is sorted. What if someone wanted to preserve adjacencies in an unsorted vector? All thoughts appreciated, thanks! Cheers, -Paul -- 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.