Estoy seguro de que hay una función para eso. Solo quiero hacer una lista de 1000 números, cada uno de ellos debe ser aleatorio.¿Cómo crear una lista de 1000 números aleatorios en Erlang?
Respuesta
para generar una lista 1000-elemento con números aleatorios entre 1 y 10:
[rand:uniform(10) || _ <- lists:seq(1, 1000)].
Cambio 10 y 1000 a los números apropiados. Si omite el 10 de la llamada rand:uniform
, obtendrá un número aleatorio de coma flotante entre 0.0 y 1.0.
En versiones de Erlang inferiores a 18.0: En su lugar, utilice el módulo random
. ¡Precaución! Debe ejecutar random:seed/3
antes de usarlo por proceso, para evitar obtener los mismos números pseudoaleatorios.
Asegúrese de sembrar adecuadamente.
> F = fun() -> io:format("~p~n", [[random:uniform(10) || _ <- lists:seq(1, 10)]]) end.
> spawn(F).
[1,5,8,10,6,4,6,10,7,5]
> spawn(F).
[1,5,8,10,6,4,6,10,7,5]
Su intuición es que los resultados serían diferentes. Una semilla aleatoria en Erlang es específica del proceso. La semilla predeterminada es fija. Es por eso que obtienes el mismo resultado a pesar de que hay dos procesos en el ejemplo.
> G = fun() -> {A1,A2,A3} = now(),
random:seed(A1, A2, A3),
io:format("~p~n", [[random:uniform(10) || _ <- lists:seq(1, 10)]])
end.
> spawn(G).
[3,1,10,7,9,4,9,2,8,3]
> spawn(G).
[9,1,4,7,8,8,8,3,5,6]
Tenga en cuenta que si el valor de retorno de now()
es el mismo en dos procesos diferentes que terminan con el mismo problema que el anterior. Es por eso que a algunas personas les gusta usar un gen_server
para envolver la generación de números aleatorios. Alternativamente puedes usar mejores semillas.
'now()' garantiza que nunca dará el mismo resultado dos veces en el mismo nodo. –
Hay otros generadores de números aleatorios más fuertes en el módulo 'crypto' (ver [http://www.erlang.org/doc/man/crypto.html](http://www.erlang.org/doc/man/ crypto.html)) – Tilman
estaré más que feliz de obtener también un sitio que podré leer allí. Gracias.
Debe consultar Learn You Some Erlang que lo guiará por el idioma.
generador de números pseudoaleatorios del módulo de cifrado funciona mejor crypto:rand_uniform(From, To)
.
para generar una lista 1000-elemento con números aleatorios entre 1 y 10:
crypto:start(),
[crypto:rand_uniform(1, 10) || _ <- lists:seq(1, 1000)].
De Erlang wiki central:
http://erlangcentral.org/wiki/index.php?title=Random_Numbers
donde n = no de artículos, StartVal = valor mínimo y Lim = valor máximo
generate_random_int_list(N,StartVal,Lim) ->
lists:map(fun (_) -> random:uniform(Lim-StartVal) + StartVal end, lists:seq(1,N)).
- 1. ¿Cómo generar una lista de números aleatorios?
- 2. Cómo crear una secuencia perezosa de números aleatorios en clojure
- 3. ¿Cómo creo una LISTA de números aleatorios únicos?
- 4. Probabilidad de números aleatorios
- 5. Cómo crear números aleatorios únicos de un generador aleatorio dado
- 6. Cómo generar números aleatorios erróneos
- 7. Números aleatorios basados en una probabilidad
- 8. números aleatorios en Java
- 9. Números aleatorios no repetitivos
- 10. Generación concurrente de números aleatorios
- 11. Haskell y números aleatorios
- 12. lista de números aleatorios únicos en un Intervalo en Ada
- 13. Análisis de números aleatorios
- 14. ¿Cómo generar números aleatorios en paralelo?
- 15. Números aleatorios en C
- 16. ¿Cómo generar números "aleatorios" pero también "únicos"?
- 17. especial de números aleatorios
- 18. Cómo generar manualmente números aleatorios
- 19. Generando Números Aleatorios en Go
- 20. Números aleatorios y negativos
- 21. Números aleatorios en un rango
- 22. ¿Cómo uso números aleatorios en C#?
- 23. ¿Cómo puedo generar números aleatorios en Python?
- 24. ¿cómo puedo usar números aleatorios en Groovy?
- 25. ¿Cómo 'aleatorizar()' números aleatorios en C (Linux)?
- 26. ¿Cómo puedo generar números aleatorios en Dart?
- 27. Números aleatorios usando C#
- 28. Generando números aleatorios no uniformes
- 29. Crappy generador de números aleatorios
- 30. c - generador de números aleatorios
Esta es una buena idea para hacer random: seed (now()). antes de eso – fycth
** No ** obtendrá "números aleatorios verdaderos" de un generador de números pseudoaleatorios sembrado con la hora actual. No estarán criptográficamente seguros. Lo que quiere decir es que cada proceso debe usar su propia semilla, por lo que no obtienen los mismos números pseudoaleatorios. –
@FilipHaglund Gracias, corregido. –