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.

Reply via email to