aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/lazy_seqs
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure/contrib/lazy_seqs')
-rw-r--r--src/clojure/contrib/lazy_seqs/lazy_seqs.clj11
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))))