range and algorithm-related stuff

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Jan 24 17:09:07 PST 2009


I'm working on the new range stuff and the range-based algorithm. In all 
likelihood, you all might be pleased with the results.

I wanted to gauge opinions on a couple of issues. One is, should the 
empty() member function for ranges be const? On the face of it it 
should, but I don't want that to be a hindrance. I presume non-const 
empty might be necessary sometimes, e.g. figuring out if a stream is 
empty effectively means fetching an element off it.

Second, there are arguably some range-related constructs that do not 
really qualify as "algorithms" (some of these are inspired from 
Haskell's standard library):

1. repeat(x) => returns an infinite range consisting of the element x 
repeated.

http://www.zvon.org/other/haskell/Outputprelude/repeat_f.html

2. take(n, range) => takes at most n elements out of a range (very 
useful with infinite ranges!)

http://www.zvon.org/other/haskell/Outputprelude/take_f.html

3. cycle(range)

http://www.zvon.org/other/haskell/Outputprelude/cycle_f.html

and a few others. I defined a new module called std.range that contains 
range fundamentals. Should I put these functions in there, or in 
std.algorithm? Or should I just merge them both to avoid confusion? If 
not, where to I draw the line between "it's an algorithm" and "it's a 
range utility"?


Thanks,

Andrei



More information about the Digitalmars-d mailing list