Estoy intentando desarrollar un "generador" de números aleatorios en F #.Forzar múltiples evaluaciones de una función en F #
que ha creado correctamente la siguiente función:
let draw() =
let rand = new Random()
rand.Next(0,36)
Esto funciona bien y genera un número entre 0 y 36.
Sin embargo, yo estoy tratando de crear una función que se ejecuta esta función varias veces .
He intentado lo siguiente
let multipleDraws (n:int) =
[for i in 1..n -> draw()]
Sin embargo, solo me dan un resultado único, como draw
se evalúa sólo una vez en el de la comprensión.
¿Cómo podría forzar múltiples ejecuciones de la función draw
?
Ok gracias, pero no entiendo, usando su solución, ¿por qué todavía no tengo el mismo problema con la semilla? – SRKX
Cuando llamas al constructor de Random, generas una semilla basada en la hora actual de la computadora. Luego, cada llamada al método Next genera un nuevo seed * basado en el seed * anterior, y no en función del tiempo.Como ya no depende del tiempo, no importa que sus llamadas se realicen en la misma hora de la máquina. –
@SRKK: Es posible que desee agregar 'printfn 'draw que se llama' 'como una primera línea del cuerpo' draw' para ver lo que está sucediendo: verá solo una salida. Su función 'dibujar' devuelve enteros, mientras que uno en la respuesta devuelve una función anónima con la firma' (unidad -> int) 'que en realidad se llama dentro de la lista de comprensión. Esta función anónima captura el valor 'rand' en un cierre,' rand' se sembró solo una vez. –