(rontolisp) docs
← リファレンス

トランスデューサー

トランスデューサーはオラクルと同じく、畳み込み関数を受け取って畳み込み関数を返す関数です。 comp は左から右へ合成し(最初のものが各入力を最初に受け取ります)、プログラム自身の (fn [rf] (fn ([] ...) ([acc] ...) ([acc x] ...))) も組み込みのものと並べて使えます。 into・transduce・sequence・eduction がこれを消費し、reduce・reduce-kv・ transduce は reduced が返ると止まります。

次の seq 関数は1引数形(dedupe と distinct は0引数形)がトランスデューサーで、呼び出しでも 値としても使えます: map・filter・remove・keep・keep-indexed・map-indexed・ take・drop・take-while・drop-while・take-nth・mapcat・partition-all・ partition-by・interpose・dedupe・distinct・replace。cat はそれ自体がトランスデューサーです。

NameExampleResult
transduce(transduce (map inc) + [1 2 3])9
eduction(eduction (filter odd?) (range 6))(1 3 5)
sequence(sequence (map inc) [1 2])(2 3)
completing(transduce (take 2) (completing + str) [1 2 3])"3"
reduced(reduce (fn [a x] (reduced x)) [1 2])2
reduced?(reduced? (reduced 1))true
unreduced(unreduced (reduced 1))1
ensure-reduced(reduced? (ensure-reduced 1))true
cat(into [] cat [[1] [2 3]])[1 2 3]