Skip to content
map-state, mapcat-state, etc for state transducers in Clojure
Clojure Shell
Find file
Latest commit 53607d7 Aug 14, 2014 @brandonbloom Update README.md
Failed to load latest commit information.
doc
script
src
test
.gitignore
README.md
project.clj

README.md

NOTE: This library is totally unrelated to Clojure 1.7's new tranducers

transduce

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.

Usage

(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

Installation

Transduce artifacts are published on Clojars.

To depend on this version with Lein, add the following to your project.clj:

[transduce "0.1.0"]

License

Copyright © 2013 Brandon Bloom

Distributed under the Eclipse Public License, the same as Clojure.

Something went wrong with that request. Please try again.