Clojure transducers

Philippe Sigaud via Digitalmars-d digitalmars-d at puremagic.com
Sun Aug 31 00:00:14 PDT 2014


> What is D's attitude toward this concept?

Hickey's original announcement is also interesting to read. Elegant, as always.

It seems to me that ranges and range algorithms in D already permit
this composition of actions, without the creation of intermediate
structures:

import std.algorithm;
import std.functional: pipe;

alias incsum = pipe!(
                map!(x => x+1),
                reduce!((x,y) => x+y)
                );

alias filtermap = pipe!(
                   filter!(x => x%2==0),
                   map!(x => x+1)
                  );

alias mapfilter = pipe!(
                    map!(x => x+1),
                   filter!(x => x%2==0)
                  );

void main() {
    auto sequence = iota(10);
    writeln(incsum(sequence)); // 55
    writeln(filtermap(sequence)); // [1, 3, 5, 7, 9]
    writeln(mapfilter(sequence)); // [2, 4, 6, 8, 10]
}


More information about the Digitalmars-d mailing list