Skip to content

Instantly share code, notes, and snippets.

@aibrahim
Last active October 24, 2017 14:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aibrahim/85af843ef94c6cda544e596f4ba8b50a to your computer and use it in GitHub Desktop.
Save aibrahim/85af843ef94c6cda544e596f4ba8b50a to your computer and use it in GitHub Desktop.
(require '[clojure.core.async :as a :refer [>! <! >!! <!! go chan buffer close! thread alts! alts!! timeout]])
(defn remove-multipliers [n l]
(filter (fn [x] ((comp not zero?) (mod x n))) l))
(def odds (rest (filter odd? (range 100000))))
(def N (count odds))
(def channels (mapv (fn [x] (chan)) (range N)))
(mapv (fn [c1 c2 x] (go (>! c2 (let [pass (<! c1)
[primes unprocessed] pass
a (first unprocessed)]
[(cons a primes) (remove-multipliers a unprocessed)] )))) channels (rest channels) odds)
(def c-filter (chan))
(def c-print (chan))
(go (>! c-filter (<! (last channels))))
(go (>! c-print (let [[primes _] (<! c-filter)] (->> primes (filter (comp not nil?)) reverse))))
(go (println (<! c-print)))
(>!! (first channels) [[] odds])
@aibrahim
Copy link
Author

at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:521)
at clojure.core$seq__4357.invokeStatic(core.clj:137)
at clojure.core$filter$fn__4812.invoke(core.clj:2700)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:521)
at clojure.core$seq__4357.invokeStatic(core.clj:137)
at clojure.core$filter$fn__4812.invoke(core.clj:2700)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:521)
at clojure.core$seq__4357.invokeStatic(core.clj:137)
at clojure.core$filter$fn__4812.invoke(core.clj:2700)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:521)
at clojure.core$seq__4357.invokeStatic(core.clj:137)
at clojure.core$filter$fn__4812.invoke(core.clj:2700)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:521)
at clojure.core$seq__4357.invokeStatic(core.clj:137)
at clojure.core$filter$fn__4812.invoke(core.clj:2700)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:521)
at clojure.core$seq__4357.invokeStatic(core.clj:137)
at clojure.core$filter$fn__4812.invoke(core.clj:2700)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment