Transducer(xf)は、Reducing function用のTransformerである。 Transducerは関数合成可能。そして合成するとき、以下のことに依存しない。 入力コンテキスト(コレクションなのか、Streamなのか、Channelなのか?) 出力コンテキスト(コレクションが欲しいのか、スカラ値が欲しいのか?) こういったことは、最後にreduce/transduceするときまで気にする必要がない。 ;; コレクションからコレクションへ (transduce all-t conj d) ;;=> ["1" "2"] ;; スカラ値へ (transduce all-t str d) ;;=> "12" コンテキストを決めるのは、ここで使うconjやstrである。all-tが適切なrfを作ってくれる。このコードは、以下のコードと同じである。 (def rf-v (all