Is there any relationship between Clojure’s Transducers and Transducers from Automata Theory?
Or are they completely different?
A transducer in Clojure is a “reducing function transformer”, i.e., a higher-order function that accepts a reducing function and returns a new reducing function.(map inc)
is a transducer, and you could apply it to a reducing function like conj
to produce a new reducing function that adds one to items as they are conj
’d into a collection:
(def inc-tf (map inc))
(def conj-inc (inc-tf conj))
(reduce conj-inc [] (range 5)) ;=> [1 2 3 4 5]
;; this pattern is common enough that we have a shorthand function:
(transduce (map inc) conj [] (range 5)) ;=> [1 2 3 4 5]
A transducer in automata theory is a transformation process from input to output, so they operate at different abstraction levels.
TL;DR: they are very different.
2 Likes