Hi,
Sorry, but I don't really get the point of the discussion so far. I think any
computation should be done in pure functional style, that gets a random
generator (seed) and passes it around. Your program starts in the IO monad
anyway, so you have the choice of using newStdGen to get a new seed or
initialise it by hand from a command line argument or whatever.
I think automatic random initialisation is very important and handy in programs
that run non-deterministic simulations.
Cheers,
Georg
On Thu, 11 Nov 2004 22:43:28 +0000, Thomas Davie <[EMAIL PROTECTED]> wrote:
On 11 Nov 2004, at 22:02, karczma wrote:
Thomas Davie writes:
This method unfortunately depends on having a seed first though.
Which "this method"? Please, quote the text you are referring to
*before*
your answer.
One must use a different value every time the program is started,
commonly time or the first few bytes from /dev/random. Any one of
these is going to require a monadic function to generate (i.e. it
must come from the environment in some way - it must change every
time you run the program) So while this eliminates the IO monad from
most of the program, it must still be initiated using it.
I understand that you mean the seed-propagation method.
You are *partly* right, that the same program executed several times
will
generate the same sequence, if initialized identically. But there is no
need for monads, it suffices to pass a parameter, or to read a
different
initialization file each time.
Of course, anybody, especially somebody contributing to this list has
the right to be a nit-picker. But, if one is a *practical* user of
random stuff, then he/she usually knows such details. Moreover, it is
sometimes very useful to control absolutely the initialization, to be
able to repeat the experiment, so, professionals in Monte Carlo, etc.
rarely if ever, use time, or system-dependent (and hidden) random
values.
For me the initialization is a *context* problem, which I separate from
the properties of the random generator. It is its quality, lack of
correlations, etc. which is important. Do you know of many problems
requiring an automated, truly random initialization? In this case one
may well delegate this issue to the *launching* of the functional
program,
instead of struggling with it from within.
This is my personal philosophy, everybody is entitled to his/hers.
While I agree that it is often useful to start your program with
different parameters each time to seed the random number generator, I
would argue that this is often inappropriate - supposing we are writing
a very simple program to roll a virtual dice. If the user finds one
input that rolls a six, they can then use this repeatedly. Reading an
initialisation file is back to the situation of using IO to generate
our seed.
Thanks
Tom Davie
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell
--
---- Georg Martius, Tel: (+49 34297) 89434 ----
------- http://www.flexman.homeip.net ---------
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe