On Wed, Jun 2, 2010 at 21:41, Andrei Alexandrescu < [email protected]> wrote:
> On 06/02/2010 02:29 PM, Philippe Sigaud wrote: > >> >> >> On Wed, Jun 2, 2010 at 19:57, bearophile <[email protected] >> <mailto:[email protected]>> wrote: >> >> Philippe Sigaud: >> > What, do you also need the no-arg version of iota? >> > >> > :-p >> >> I'd like a generator (range) similar to the Python itertools.count, >> that yields numbers starting from the given number (defaulting to >> zero) and just goes on and on. You can use it in many situations: >> http://docs.python.org/library/itertools.html#itertools.count >> >> >> Yes, it's handy. It's one of the first range I made, a year ago. >> > > iota(n, n.max) is close. Well, it's not infinite, but cycle(iota(n, n.max)) > is. Probably a version using BigInt would be most sensible. > As it's mostly used to enumerate/index ranges or generate some simple numbers, iota(n,n.max) is largely good enough, except, as you said it's not infinite. I never used iota much, it regularly crashed on me in the beginning. I can't remember why. I don't know if your suggestion of BigInt is a joke or not, but the truth is, I have a version using any numerical type, I called it numberz. numbers is the standard version, numberz!T the templated. It uses T for indexing also (it's a random-access range), which allowed me to do auto r = numberz(BigInt("1000000000"), BigInt("10000000000")); auto n = r[BigInt("3000000000")]; Hmm, this doesn't work: auto i = iota(BigInt("0"),BigInt("10"), BigInt("1")); But honestly, I just used it to learn ranges and D, and never had a real use for it. It's just the kind of things that's useful to try, to break out of some preconceptions (using a size_t to index..., 1u as a step). As you said, it already takes loooots of iterations to exhaust a long. Philippe
