Ranges and random numbers -- again
Joseph Rushton Wakeling
joseph.wakeling at webdrake.net
Mon Jun 17 13:12:58 PDT 2013
On 06/17/2013 09:00 PM, H. S. Teoh wrote:
> I understand your reasons for choosing this rule, but I feel a bit
> uneasy about it. Under this rule, RNGs would produce their entire random
> sequence just by accessing .front multiple times, which violates the
> standard range behaviour of .front not changing until you call
> popFront().
In the general case, I will make some remarks on this in that next email I
talked about. Suffice to say that I don't think that simply calling front() 3
times should produce 3 different results. The point is that an iteration across
the entire thing should produce different results.
In the specific case of pseudo-random number generators, I would say that (odd
though it might seem) I don't consider them to be random ranges. There is
nothing random about their popFront() statements! They are deterministic
sequences just as much as std.range.iota, std.range.sequence or
std.range.recurrence.
> Is it possible to arrange it so that the ctors behave as though
> popFront() were called at the end? (I say "as though" because there are
> some cases for which this shouldn't actually happen, like when there's a
> finite permutation sequence involved.)
In brief, the solution I came to with RandomSample was to define a boolean
variable called _first which was set to true in the constructor. Then inside
front() there would be a check for _first, and if it was true, an initial value
for front would be determined, and _first would be set to false.
If _first was false, then front would just return its present value.
However, this has some problems, which I'll discuss in the next email.
More information about the Digitalmars-d
mailing list