F#列表。使用随机数映射
我想创建一个包含20个随机数的列表。我写道:F#列表。使用随机数映射,f#,F#,我想创建一个包含20个随机数的列表。我写道: let numberList = [ 1 .. 20 ] let randoms = numberList |> List.map (fun (x) -> System.Random().Next(0,9)) 我得到了这个: val numberList : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 1
let numberList = [ 1 .. 20 ]
let randoms =
numberList
|> List.map (fun (x) -> System.Random().Next(0,9))
我得到了这个:
val numberList : int list =
[1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20]
val randoms : int list =
[7; 7; 7; 7; 7; 7; 7; 7; 7; 7; 7; 7; 7; 7; 7; 7; 7; 7; 7; 7]
这是有道理的。问题是,每次对函数进行如下计算时,我都希望传入一个随机数:
let numberList = [ 1 .. 20 ]
let randoms =
numberList
|> List.map (fun (Random().Next(0,9)) -> x)
但我得到了一个“模式鉴别器‘随机’未定义”的例外
我是否以错误的方式处理这个问题?
提前感谢在原始版本中,您可以在每次迭代中创建一个新的随机对象。由于这是当前时间的种子,因此始终创建相同的序列 您需要像这样在贴图外部创建对象
let RNG = new System.Random()
numberlist |> List.map (fun x -> RNG.Next(0,9))
虽然更优雅的解决方案是
let RNG = new System.Random()
let randoms = List.init 20 (fun _ -> RNG.Next(0,9))
您的第二个版本失败了,因为您试图将随机视为一种模式,在这种情况下没有任何意义。当我完全限定随机参数时,如:System.Random()。下一步(0,9),我得到一个结果,这不是变量、常量、活动识别器或可能的文本副本