From d7f4c2685706b638be7ec5e4d7d400def732f22e Mon Sep 17 00:00:00 2001 From: kovan Date: Sat, 14 Mar 2026 20:23:24 +0100 Subject: [PATCH] Fix reducers foldcat example to actually fold in parallel The example used (range 100000) which returns a seq. Seqs do not implement CollFold and fall back to single-threaded reduce, making the foldcat example misleading on a page about parallel folding. Wrap with vec so the example actually demonstrates parallel folding. Add a note explaining that seqs must be converted to vectors first. Verified against reducers.clj: Object/coll-fold (line 320) falls back to single reduce, while IPersistentVector/coll-fold (line 326) performs parallel fork-join folding. Fixes #377 --- content/reference/reducers.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/reference/reducers.adoc b/content/reference/reducers.adoc index 985e6158..22cac16e 100644 --- a/content/reference/reducers.adoc +++ b/content/reference/reducers.adoc @@ -64,10 +64,10 @@ Use https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/into[in ---- (into [] (r/filter even? (r/map inc (range 100000)))) ---- -Or https://clojure.github.io/clojure/clojure.core-api.html#clojure.core.reducers/foldcat[r/foldcat]: +Or https://clojure.github.io/clojure/clojure.core-api.html#clojure.core.reducers/foldcat[r/foldcat] to produce a foldable collection. Note the use of `vec` — seqs like those returned by `range` do not support parallel folding, so they must be converted to a vector first: [source,clojure] ---- -(r/foldcat (r/filter even? (r/map inc (range 100000)))) +(r/foldcat (r/filter even? (r/map inc (vec (range 100000))))) ---- Specify a reduce function and a combine function with fold: [source,clojure]