Ranges and random numbers -- again

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Jun 17 21:00:52 PDT 2013


On 6/17/13 6:29 PM, Joseph Rushton Wakeling wrote:
> On 06/17/2013 11:18 PM, Joseph Rushton Wakeling wrote:
>>> A random range should be viewed (IMO) as nothing more than a range that "was"
>>> (conceptually) simply filled with random numbers. Calling front on the same
>>> range twice in a row *should* produce the same result: No call to popFront =>  no
>>> change to the range. If it did change, it'd be a blatant violation of the range
>>> concept. It also means you can't have safe/nothrow/pure/const "front".
>>
>> Completely agree, and I don't think this is in contradiction with what I've
>> proposed.  My proposed "rule" might be better stated to clarify this.
>
> Perhaps this would be a better statement:
>
>      ************************************************************************
>      * Iterating fully over a given random range should produce a different *
>      * sequence for each such complete iteration.                           *
>      ************************************************************************
>
> So, if you do,
>
>      SomeRandomRange r;
>      x = r.front;
>      y = r.front;
>      assert(x == y);  // Passes!!
>
> But
>
>      SomeRandomRange r;
>      arr1 = array(r);
>      arr2 = array(r);
>      assert(x != y);  // the two arrays are filled with different sequences.

Once you consume an input range, there's no way to consume it again. 
It's done.

Andrei


More information about the Digitalmars-d mailing list