From 8fb512b83af31a6fa155f371440fc64957eca591 Mon Sep 17 00:00:00 2001 From: Christophe Grand Date: Fri, 4 Sep 2015 13:43:29 +0200 Subject: [PATCH] fix x/for (had a dirty repl, my bad) and put an example in the README. --- README.md | 10 +++++++++- src/net/cgrand/xforms.clj | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4bd2025..d2b95b7 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@ Add this dependency to your project: [net.cgrand/xforms "0.1.0-SNAPSHOT"] ``` - ```clj => (require '[net.cgrand.xforms :as x]) ``` @@ -28,6 +27,15 @@ Add this dependency to your project: Execution time mean : 11,609631 µs ``` +`for` is the transducing cousin of `clojure.core/for`: + +```clj +=> (quick-bench (reduce + (for [i (range 128) j (range i)] (* i j)))) + Execution time mean : 514,932029 µs +=> (quick-bench (transduce (x/for [i % j (range i)] (* i j)) + 0 (range 128))) + Execution time mean : 373,814060 µs +``` + `by-key` and `reduce` are two new transducers. Here is an example usage: ```clj diff --git a/src/net/cgrand/xforms.clj b/src/net/cgrand/xforms.clj index f844abe..95222bc 100644 --- a/src/net/cgrand/xforms.clj +++ b/src/net/cgrand/xforms.clj @@ -17,7 +17,7 @@ :let `(let ~expr ~body) :when `(if ~expr ~body ~acc) :while `(if ~expr ~body (reduced ~acc)) - `(reduce (fn [~acc ~binding] ~body) ~acc ~expr))) + `(clj/reduce (fn [~acc ~binding] ~body) ~acc ~expr))) `(~rf ~acc ~body) (clj/partition 2 (rseq (vec seq-exprs))))] `(fn [~rf]