aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/seq_utils.clj
diff options
context:
space:
mode:
authorscgilardi <scgilardi@gmail.com>2009-02-15 05:35:40 +0000
committerscgilardi <scgilardi@gmail.com>2009-02-15 05:35:40 +0000
commitf4bc2008141857fbe32eeb54c8fcd0183b27ffee (patch)
treebbd5ce54b5d96a27ff0678d51ddaa0413e257a06 /src/clojure/contrib/seq_utils.clj
parent08806a7a5ebc62d8243b1389eaf6fe00b3f6674f (diff)
fix issue 29: move sequence functions from lazy_seqs to seq_utils
Diffstat (limited to 'src/clojure/contrib/seq_utils.clj')
-rw-r--r--src/clojure/contrib/seq_utils.clj31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/clojure/contrib/seq_utils.clj b/src/clojure/contrib/seq_utils.clj
index c559cb1b..36a8e07d 100644
--- a/src/clojure/contrib/seq_utils.clj
+++ b/src/clojure/contrib/seq_utils.clj
@@ -121,4 +121,33 @@
(rec-cons self (first coll) (map f self (rest coll)))
(cons (f) nil)))
([f init coll]
- (rec-cons self init (map f self coll)))) \ No newline at end of file
+ (rec-cons self init (map f self coll))))
+
+(defn rotations
+ "Returns a lazy seq of all rotations of a seq"
+ [x]
+ (if (seq x)
+ (map
+ (fn [n _]
+ (lazy-cat (drop n x) (take n x)))
+ (iterate inc 0) x)
+ (list nil)))
+
+(defn partition-all
+ "Lazily break s into chunks of length n (or less, for the
+ final chunk)."
+ [n s]
+ (when (seq s)
+ (lazy-cons (take n s)
+ (partition-all n (drop n s)))))
+
+(defn shuffle
+ "Return a random permutation of coll"
+ [coll]
+ (let [l (java.util.ArrayList. coll)]
+ (java.util.Collections/shuffle l)
+ (seq l)))
+
+(defn rand-elt [s]
+ "Return a random element of this seq"
+ (nth s (rand-int (count s))))