Sono sicuro che esiste una funzione per questo. Voglio solo fare una lista di 1000 numeri, ognuno dei quali dovrebbe essere casuale.Come creare un elenco di 1000 numeri casuali in Erlang?
risposta
Per generare un elenco di 1000 elementi con numeri casuali compreso tra 1 e 10:
[rand:uniform(10) || _ <- lists:seq(1, 1000)].
Cambio 10 e 1000 per i numeri appropriati. Se ometti il 10 dalla chiamata rand:uniform
, otterrai un numero a virgola mobile casuale compreso tra 0.0 e 1.0.
Nelle versioni di Erlang inferiore a 18.0: Utilizzare invece il modulo random
. Attenzione! È necessario eseguire random:seed/3
prima di utilizzarlo per processo, per evitare di ottenere gli stessi numeri pseudo casuali.
Assicurarsi di seminare in modo appropriato.
> 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]
Il tuo intuito è che i risultati sarebbero diversi. Un seme casuale in Erlang è specifico del processo. Tuttavia, il seme predefinito è stato risolto. Ecco perché ottieni lo stesso risultato anche se nell'esempio sono presenti due processi.
> 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]
Nota che se il valore di ritorno della now()
è la stessa in due processi differenti si finisce con lo stesso problema di cui sopra. Questo è il motivo per cui alcune persone amano usare uno gen_server
per avvolgere la generazione di numeri casuali. In alternativa puoi usare semi migliori.
'now()' tuttavia non garantisce mai lo stesso risultato due volte nello stesso nodo. –
Ci sono altri generatori di numeri casuali più forti nel modulo 'crypto' (si veda [http://www.erlang.org/doc/man/crypto.html](http://www.erlang.org/doc/man/ crypto.html)) – Tilman
sarò più che felice di ottenere anche un sito che sarò in grado di leggere lì. Grazie.
Si consiglia di verificare Learn You Some Erlang che guiderà l'utente attraverso la lingua.
Il generatore di numeri pseudocasuali dal modulo di crittografia funziona meglio crypto:rand_uniform(From, To)
.
Per generare un elenco di 1000 elementi con numeri casuali compreso tra 1 e 10:
crypto:start(),
[crypto:rand_uniform(1, 10) || _ <- lists:seq(1, 1000)].
Da Erlang wiki centrale:
http://erlangcentral.org/wiki/index.php?title=Random_Numbers
Dove n = no di oggetti, StartVal = valore minimo e Lim = valore massimo
generate_random_int_list(N,StartVal,Lim) ->
lists:map(fun (_) -> random:uniform(Lim-StartVal) + StartVal end, lists:seq(1,N)).
- 1. Python: numeri casuali in un elenco
- 2. Come generare un elenco di numeri interi casuali ascendenti
- 3. numeri casuali in PySpark
- 4. Come creare una sequenza lenta di numeri casuali in clojure
- 5. Numeri casuali in un intervallo
- 6. Come creare numeri casuali uniche da un dato generatore casuale
- 7. Come funziona un generatore di numeri casuali?
- 8. Come resettare un motore di numeri casuali?
- 9. Generazione contemporanea di numeri casuali
- 10. numeri casuali probabilità
- 11. R - Creare un frame di dati con numeri casuali in ogni colonna
- 12. Haskell e numeri casuali
- 13. speciale di numeri casuali
- 14. Numeri casuali in C
- 15. Progettazione di un generatore di numeri casuali
- 16. Numeri casuali non ripetuti
- 17. Genera un insieme di numeri casuali univoci in Java
- 18. Come generare numeri casuali diversi?
- 19. Numeri casuali protetti in javascript?
- 20. Generatore di numeri casuali Crossplatform
- 21. Come si usano numeri casuali in C#?
- 22. Generazione di numeri casuali in applicazioni MVC
- 23. Boost generatore di numeri casuali
- 24. come posso usare numeri casuali in groovy?
- 25. Cosa succede quando si copia un motore di numeri casuali e una distribuzione di numeri casuali?
- 26. Numeri casuali ponderati
- 27. Come posso generare numeri casuali in Python?
- 28. c - generatore di numeri casuali
- 29. Come "randomize()" numeri casuali in C (Linux)?
- 30. Come posso generare numeri casuali in Dart?
Questa è una buona idea da eseguire casualmente: seed (now()). prima di quello – fycth
** non ** otterrà "numeri casuali veri" da un generatore di numeri pseudo-casuali seminato con l'ora corrente. Non saranno crittograficamente sicuri. Quello che intendi è che ogni processo dovrebbe usare il proprio seme, in modo che non ottengano gli stessi numeri pseudo-casuali. –
@FilipHaglund Grazie, corretto. –