## DEV Community is a community of 640,935 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# Discussion on: List Comprehension in D

## Replies for: The built-in module "itertools" has support for Cartesian products, iterator flattening, and more. Comparing one tool in Python, list comprehension...

Jesse Phillips

Just stumbled acrossed this

medium.com/better-programming/how-...

The issue I see with this is chaining multiple operations. In the example he stores the result before the next operation.

Let's look at an alternative way to make it readable.

``````// Original breakup, but written in D
auto numbers = [1,2,3,4,5,6];

auto odd_numbers = filter!(n=> n % 2 == 1)(numbers);

auto squared_odd_numbers = map!(n=> n * n)(odd_numbers);

// fold is another name used for reduce
auto total1 = fold!((acc, n)=> acc + n)(squared_odd_numbers, 0);

// chain operation
auto total2 = numbers
.filter!(n=> n % 2 == 1)
.map!(n=> n * n)
.fold!((acc, n)=> acc + n)(0);

// Name the lambda operation
alias odds = x => x % 2 == 1;
alias square = x => x * x;
alias sum = (acc, n)=> acc + n;

auto total3 = numbers
.filter!odds
.map!square
.fold!sum(0);

assert(total1 == total2);
assert(total3 == total2);
``````

The language isn't the driving force for readability here.

If you look closely D does provide usage challenges since I introduced the use of alias. Explaining its need would be more technical than `lambda :` is that a bad thing? I don't know.