map-state, mapcat-state, etc for state transducers in Clojure
NOTE: This library is totally unrelated to Clojure 1.7's new tranducers
A Clojure library providing functions for threading a state accumulator through a sequence transformation. These state/behavior pairs are sometimes called "transducers" or "state transducers".
The class of transducers which use bounded space are particularly interesting. They are known as finite state transducers.
In particular, this library provides map-state
and mapcat-state
, which are
like their stateless namesakes. Also provided is a non-macro variant of
doseq
, called each
. Both lazy sequence and reducers versions are available
for all functions.
(require '[transduce.lazy :as t])
;OR: (require '[transduce.reducers :as t])
(do
(->> [[:c \a] [:n 3] [:c \b] [:c \c] [:n 1] [:c \d]]
(t/mapcat-state (fn [n [cmd arg]]
(case cmd
:n [arg nil]
:c [n (repeat n arg)]))
1)
(t/each print))
(println))
;=> abbbcccd
;=> nil
Transduce artifacts are published on Clojars.
To depend on this version with Lein, add the following to your project.clj
:
[transduce "0.1.0"]
Copyright © 2013 Brandon Bloom
Distributed under the Eclipse Public License, the same as Clojure.