generate an array of 100 uniform distributed numbers
    Ali Çehreli via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Thu Jan 22 11:37:54 PST 2015
    
    
  
On 01/22/2015 11:26 AM, ddos wrote:
 > i want to create 100 uniform distributed numbers and print them
 > my first attempt, just written by intuition:
 > [0 .. 100].map!(v => uniform(0.0, 1.0).writeln);
 >
 > i found out i can't write [0 .. 100] to define a simple number range,
As currently being discussed in another thread, the a..b syntax does not 
correspond to a first-class D language construct.
 > but is there a function to do so?
Yes, std.range.iota:
     auto numbers = iota(100).map!(_ => uniform(0.0, 1.0));
Note that, 'numbers' is lazy, the definition above does not call 
uniform() yet.
To make an array out of it, call std.array.array at the end:
     auto numbers = iota(100).map!(_ => uniform(0.0, 1.0)).array;
 > second attempt, replacing the range with an simple array
 > [0,1,2].map!(v => uniform(0.0,1.0).writeln);
 > this does compile and run, but doesn't print anything, just an empty
 > string, why is that?
What I said above: it is just a range waiting to be used.
 > finally i got it working with this:
 > auto t = [0,1,2].map!(v => uniform(0.0,1.0));
 > writeln(t);
 >
 > seems pretty easy eh?
writeln() consumes any range to print it on the standard output. There 
is no array to speak of though: writeln() consumes a copy of 't' and 
your 't' is still a lazy range waiting to be consumed.
Ali
    
    
More information about the Digitalmars-d-learn
mailing list