Hi,
I just wrote a very small combinatorics utility for myself. Choose. It
is given a vector of elements, followed by a number that indicates how
many elements to "choose" out of the vector. It returns all possible
combinations of choosing <num> elements out of <v> while retaining the
correct order.

I hit a snag though, I'm getting lots of OutOfMemory errors because of
the use of mapcat, which doesn't seem to be lazy. Can I have some help
writing this into a lazy function?

Thanks a lot
  -Patrick

(defn choose [v num]
  (if (zero? num)
      []
      (mapcat (fn [i]
                  (let [n (nth v i)]
                       (map #(conj % n) (choose (nthrest v (inc i))
(dec num)))))
              (range (count 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
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