Jonathan M Davis:

I use it when I need it,

I think there many usages of iota that you are missing. To spot those cases you probably need to train yourself a bit. A Python programmer doesn't need that training.


I can't remember the last
time that I needed to generate a range of numbers for anything.

There are hundreds of use cases. Some examples:

To create a row of an identity matrix (j is the row number):

iota(n).map!(i => cast(T)(i == j))()


A short matrix transpose:

auto transpose(T)(in T[][] m) {
    return iota(m[0].length).map!(i => transversal(m, i))();
}


To write progressive numbers in a textual table:

string result = format("N. flags: %d\n    %(%d%)",
                       n_flags, iota(1, n_columns + 1));

Or to generate the ticks on the table rows:

auto line = iota(m).map!(_ => std.array.replicate(["+--"], n))()


To generate a table of random numbers:

auto randoms = iota(n).map!(_ => uniform(0.0, 1.0))().array();


More usages with random numbers:

bool isIn(int) {
    return hypot(uniform(0.0, 1.0), uniform(0.0, 1.0)) <= 1;
}
double pi(in int n) {
    return 4.0 * count!isIn(iota(n)) / n;
}

Bye,
bearophile

Reply via email to