On 12/04/12 20:39, Ali Çehreli wrote:
That's misleading. RandomSample is a lazy range. The output seems to be elements
of an array only as you pull data out of this range.
Ahhh, it's lazy evaluation. That would explain why you can set ret.gen = gen in
the randomSample functions and have it work.
(... realized that before reading your explicit statement to that effect:-)
I shamelessly provide a link to a chapter that I have written, which I think
covers all of these topics:
http://ddili.org/ders/d.en/ranges.html
No shame required, your textbook is very nice :-)
I think I understand better now -- that the initial value is calculated by the
call to prime() in the constructor, which leaves _input.front as being the first
selected value; and then popFront() calls prime() again to set the next value,
and so on.
What I _still_ don't understand is the statement in the constructor:
// we should skip some elements initially so we don't always
// start with the first
... as it seems to me that doing so would bugger up the selection algorithm.
The whole point of Algorithm S is that it considers one by one each of the
possible values in sequence.