On 05/29/2015 06:07 PM, Dennis Ritchie wrote:

> Hi,
> This code prints the arrays:
> [5]
> [6]
> [7]
>
> import std.stdio, std.algorithm;
>
> static int idx;

Do you want to share that for the first element of every two-element array or do you want to start from 0 for every range?

> void walk(R)(R range) {
>      while (!range.empty) {
>          range.front;
>          range.popFront;
>          ++idx;
>      }
> }

As a reminder, there is also the recent 'each', which is eager as well.

> void main() {
>      [5, 6, 7].map!(a => [a].writeln).walk;
> }
>
> How should I apply mixins to `range.front` to the program to print the
> arrays:
> [0, 5]
> [1, 6]
> [2, 7]

Unless mixin required for another reason, there are other ways of achieving the same.

> Ie I want to get something like this:
>
> void walk(R)(R range) {
>      while (!range.empty) {
>          // mixin(`[idx ~ "mixin("range.front")"[1 .. $]);`);
>          range.popFront;
>          ++idx;
>      }
> }
>
> Can I do this?
>
> -----
> Thank you for the function `walk` Mark Isaacson of presentation DConf 2015:
> http://dconf.org/2015/talks/isaacson.pdf

The following program produces the desired output twice. The first one starts from 0 for the index, the second one shares the index as in your code.

import std.stdio, std.algorithm, std.range;

void main() {
    zip(sequence!"n", [5, 6, 7])
        .map!(a => [a.expand])
        .each!writeln;

    static int idx;

    [5, 6, 7]
        .map!(a => [idx++, a])
        .each!writeln;
}

Ali

Reply via email to