Erlang中的列表处理和随机数生成

ato*_*3ls 0 random erlang

当我在randy:spawner()下面运行时,为什么会得到相同数字的列表?我期待着一个随机数列表.我怎么能改变代码来实现这个目标?

-module(randy).
-export([randlister/2,spawner/0]).
-import(lists,[map/2]).

spawner() ->
    [spawn(fun() -> randlister(X,random:uniform()) end) || X <- lists:seq(1,3)].


randlister(X, Randomnumber) ->
io:format("~p,    ~p~n",[X,Randomnumber]).
Run Code Online (Sandbox Code Playgroud)

示例输出:

18> randy:spawner().
1,    0.4435846174457203
2,    0.4435846174457203
3,    0.4435846174457203
Run Code Online (Sandbox Code Playgroud)

Emi*_*röm 5

您必须在每个进程中播种随机数生成器:

spawner() ->
    [spawn(fun() ->
                   random:seed(now()),
                   randlister(X,random:uniform())
           end) || X <- lists:seq(1,3)].
Run Code Online (Sandbox Code Playgroud)