diff options
author | Stuart Sierra <mail@stuartsierra.com> | 2010-08-07 16:41:53 -0400 |
---|---|---|
committer | Stuart Sierra <mail@stuartsierra.com> | 2010-08-07 16:41:53 -0400 |
commit | a6a92b9b3d2bfd9a56e1e5e9cfba706d1aeeaae5 (patch) | |
tree | f1f3da9887dc2dc557df3282b0bcbd4d701ec593 /modules/lazy-seqs/src | |
parent | e7930c85290f77815cdb00a60604feedfa2d0194 (diff) |
Split all namespaces into sub-modules.
* Examples and tests have not been copied over.
* Clojure test/compile phases are commented out in parent POM.
* May require installing parent POM before full build.
Diffstat (limited to 'modules/lazy-seqs/src')
-rw-r--r-- | modules/lazy-seqs/src/main/clojure/clojure/contrib/lazy_seqs.clj | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/modules/lazy-seqs/src/main/clojure/clojure/contrib/lazy_seqs.clj b/modules/lazy-seqs/src/main/clojure/clojure/contrib/lazy_seqs.clj new file mode 100644 index 00000000..2a0c0a6c --- /dev/null +++ b/modules/lazy-seqs/src/main/clojure/clojure/contrib/lazy_seqs.clj @@ -0,0 +1,90 @@ +;; Copyright (c) Stephen C. Gilardi. All rights reserved. The use and +;; distribution terms for this software are covered by the Eclipse Public +;; License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can +;; be found in the file epl-v10.html at the root of this distribution. By +;; using this software in any fashion, you are agreeing to be bound by the +;; terms of this license. You must not remove this notice, or any other, +;; from this software. +;; +;; lazy-seqs +;; +;; == Lazy sequences == +;; +;; primes - based on the "naive" implemention described in [1] plus a +;; small "wheel" which eliminates multiples of 2, 3, 5, and +;; 7 from consideration by incrementing past them. Also inspired +;; by code from Christophe Grand in [2]. +;; +;; fibs - all the Fibonacci numbers +;; +;; powers-of-2 - all the powers of 2 +;; +;; == Lazy sequence functions == +;; +;; (partition-all, shuffle moved to clojure.core) +;; (rand-elt moved to clojure.core/rand-nth) +;; (rotations, moved to seq_utils.clj) +;; (permutations and combinations moved to combinatorics.clj) +;; +;; [1] http://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf +;; [2] http://clj-me.blogspot.com/2008/06/primes.html +;; +;; scgilardi (gmail) +;; Created 07 June 2008 + +(ns + ^{:author "Stephen C. Gilardi", + :doc " +==== Lazy sequences ==== + + primes - based on the \"naive\" implemention described in [1] plus a + small \"wheel\" which eliminates multiples of 2, 3, 5, and + 7 from consideration by incrementing past them. Also inspired + by code from Christophe Grand in [2]. + + fibs - all the Fibonacci numbers + + powers-of-2 - all the powers of 2 + + ==== Lazy sequence functions ==== + + (partition-all, shuffle moved to clojure.core) + (rand-elt moved to clojure.core/rand-nth) + (rotations, rand-elt moved to seq_utils.clj) + (permutations and combinations moved to combinatorics.clj) + + [1] http://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf + [2] http://clj-me.blogspot.com/2008/06/primes.html +"} + clojure.contrib.lazy-seqs + (:use clojure.contrib.def)) + +; primes cannot be written efficiently as a function, because +; it needs to look back on the whole sequence. contrast with +; fibs and powers-of-2 which only need a fixed buffer of 1 or 2 +; previous values. +(defvar primes + (concat + [2 3 5 7] + (lazy-seq + (let [primes-from + (fn primes-from [n [f & r]] + (if (some #(zero? (rem n %)) + (take-while #(<= (* % %) n) primes)) + (recur (+ n f) r) + (lazy-seq (cons n (primes-from (+ n f) r))))) + wheel (cycle [2 4 2 4 6 2 6 4 2 4 6 6 2 6 4 2 + 6 4 6 8 4 2 4 2 4 8 6 4 6 2 4 6 + 2 6 6 4 2 4 6 2 6 4 2 4 2 10 2 10])] + (primes-from 11 wheel)))) + "Lazy sequence of all the prime numbers.") + +(defn fibs + "Returns a lazy sequence of all the Fibonacci numbers." + [] + (map first (iterate (fn [[a b]] [b (+ a b)]) [0 1]))) + +(defn powers-of-2 + "Returns a lazy sequence of all the powers of 2" + [] + (iterate #(bit-shift-left % 1) 1)) |