number ranges
Paul Backus
snarwin at gmail.com
Mon Jan 17 11:58:18 UTC 2022
On Monday, 17 January 2022 at 10:24:06 UTC, forkit wrote:
> so I'm wondering why the code below prints:
>
> 1 2 3 4
>
> and not
>
> 1 2 3 4 5
>
> as I would expect.
>
> foreach (value; 1..5) writef("%s ", value);
This kind of half-open interval, which includes the lower bound
but excludes the upper bound, is used in programming because it
lets you write
foreach (i; 0 .. array.length) writef("%s ", array[i]);
...without going past the end of the array.
Edsger W. Dijkstra, a well-known academic computer scientist, has
written in more detail about the advantages of this kind of
interval:
https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html
> also, why is this not possible:
>
> int[] arr = 1..5.array;
The `lower .. upper` syntax only works in foreach loops. If you
want to create a range of numbers like this in another context,
you must use the library function std.range.iota:
import std.range: iota;
int[] arr = iota(1, 5).array;
(Why "iota"? Because in APL, the Greek letter iota (ι) is used to
create a range of numbers like this.)
More information about the Digitalmars-d-learn
mailing list