gpt4 book ai didi

random - F# 使用 System.Random() 获取随机数列表给出相同的列表

转载 作者:行者123 更新时间:2023-12-01 04:53:46 24 4
gpt4 key购买 nike

我一直在寻找其他问题,其中用户会在循环或方法中实例化许多 System.Random(),因此从同一个时钟创建许多相同的随机数。但是这里我有一个实例化的 System.Random() 但是当我尝试用它来创建多个随机数列表时,它们都是一样的。

module Scripts =
let rnd = System.Random()

let getRandom36 =
let rec generate (l : list<int>) =
match l.Length with
|8 -> l
|_ -> let number = rnd.Next 38
if(List.exists(fun elem -> elem=number) l) then generate l else generate (number::l)
List.sort(generate List.empty)

let myseq = Seq.init 4 (fun _ -> getRandom36)

重要的部分并不是 getRandom36 中的代码是如何工作的,我一直在篡改它以不同的方式工作,但在调用 myseq 时我总是得到看起来相同的列表;;

myseq;;
val it : seq<int list> =
seq
[[2; 8; 10; 11; 18; 21; 22; 35]; [2; 8; 10; 11; 18; 21; 22; 35];
[2; 8; 10; 11; 18; 21; 22; 35]; [2; 8; 10; 11; 18; 21; 22; 35]; ...]

有什么想法吗?我的意思是 rnd.Next 不应该每次都不同,因为每次迭代都不会生成 rnd 的新实例。

最佳答案

getRandom36 是一个值而不是函数。可以像下面这样修复:

let rnd = System.Random() 

let getRandom36 _ =
let rec generate (l : list<int>) =
match l.Length with
|8 -> l
|_ -> let number = rnd.Next 38
if(List.exists(fun elem -> elem=number) l) then generate l else generate (number::l)
List.sort(generate List.empty)

let myseq = Seq.init 4 getRandom36

关于random - F# 使用 System.Random() 获取随机数列表给出相同的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38590372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com