diff options
Diffstat (limited to 'src/clojure/contrib/lazy_seqs/lazy_seqs.clj')
-rw-r--r-- | src/clojure/contrib/lazy_seqs/lazy_seqs.clj | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/clojure/contrib/lazy_seqs/lazy_seqs.clj b/src/clojure/contrib/lazy_seqs/lazy_seqs.clj index 17fe1a69..429700de 100644 --- a/src/clojure/contrib/lazy_seqs/lazy_seqs.clj +++ b/src/clojure/contrib/lazy_seqs/lazy_seqs.clj @@ -86,3 +86,14 @@ (map #(cons f %) (permutations r))) (rotations x)) (list nil))) + +(defn combinations + "Returns a lazy seq of all combinations built of one item from each seq given. + See also (doc for)" + [& acs] + (let [step (fn step [head [s & cs :as acs]] + (if acs + (mapcat #(step (conj head %) cs) s) + (list head)))] + (when acs + (step [] acs)))) |