List.init(F#)的第二个参数中需要澄清

List.init(F#)的第二个参数中需要澄清,list,f#,List,F#,你能解释一下List.init中的第二个参数吗 让test2=List.init100000(fun->System.Random().Next(-50,51)) 来自List.init的声明;据我所知,init采用int和“采用索引并返回泛型值的函数”作为参数。返回值是传递的泛型类型的列表 但是我不明白在给定的let绑定中如何应用函数 谢谢 我想我现在明白了fun\u->System.Random().Next(-50,51)是一个匿名函数,它使用uu作为参数的通配符占位符,并返回一个随机数

你能解释一下List.init中的第二个参数吗

让test2=List.init100000(fun->System.Random().Next(-50,51))

来自List.init的声明;据我所知,init采用
int
和“采用索引并返回泛型值的函数”作为参数。返回值是传递的泛型类型的列表

但是我不明白在给定的
let
绑定中如何应用函数


谢谢

我想我现在明白了
fun\u->System.Random().Next(-50,51)
是一个匿名函数,它使用uu作为参数的通配符占位符,并返回一个随机数


因此,它可以用作init的第二个参数,并返回随机生成的整数列表。

我想我现在明白了
fun\u->System.Random().Next(-50,51)
是一个匿名函数,它使用uu作为参数的通配符占位符,并返回一个随机数


因此,它可以用作init的第二个参数,并返回随机生成的整数列表。

list。init
获取一个整数作为列表的大小,然后使用一个函数填充每个元素。此函数接受正在填充的元素的当前索引(即int)。列表中元素的类型取决于第二个函数的返回类型。在您的例子中,一个
int

在问题中的示例中,函数
fun\u->System.Random()。下一步(-50,51)
将只选择随机值来填充列表。因为它是新的,每次都是随机的,你每次都会得到相同的值,因为计算机和随机性不是很熟悉。许多语言中都使用了
\uuu
,表示我们不关心参数的值,因为我们不打算使用它。因此这里
\uuu
用作匿名泛型参数

对于实际的“random”值,您可以将
random()
调用移到函数外部并关闭它,或者技术上可以使用项索引作为种子编号。我不建议这样做,但它确实说明了该函数的作用

let test1 = List.init 100000 (fun i -> System.Random(i).Next(-50, 51))
正如我所提到的,类似这样的事情更可能是你所追求的:

//Random
let random = System.Random()
// int -> int 
let generate (_:int) = random.Next(-50, 51)//note this has the signature we need for the 2nd parameter of List.init
// generate the list
let test2 = List.init 10 generate;;
也可用于匹配。这里我们有一个元组,我们想要解构它来得到它的值

let person = ("Bob","Builder")
let (firstname,lastname) = person
let (_,surname) = person
如果我们不关心名字,我们不需要得到它,但仍然可以使用相同的语法,我们只需要使用
\uuu
来表示我们不关心这个值


Reference

列表。init
获取列表大小的整数,然后是用于填充每个元素的函数。此函数接受正在填充的元素的当前索引(即int)。列表中元素的类型取决于第二个函数的返回类型。在您的例子中,一个
int

在问题中的示例中,函数
fun\u->System.Random()。下一步(-50,51)
将只选择随机值来填充列表。因为它是新的,每次都是随机的,你每次都会得到相同的值,因为计算机和随机性不是很熟悉。许多语言中都使用了
\uuu
,表示我们不关心参数的值,因为我们不打算使用它。因此这里
\uuu
用作匿名泛型参数

对于实际的“random”值,您可以将
random()
调用移到函数外部并关闭它,或者技术上可以使用项索引作为种子编号。我不建议这样做,但它确实说明了该函数的作用

let test1 = List.init 100000 (fun i -> System.Random(i).Next(-50, 51))
正如我所提到的,类似这样的事情更可能是你所追求的:

//Random
let random = System.Random()
// int -> int 
let generate (_:int) = random.Next(-50, 51)//note this has the signature we need for the 2nd parameter of List.init
// generate the list
let test2 = List.init 10 generate;;
也可用于匹配。这里我们有一个元组,我们想要解构它来得到它的值

let person = ("Bob","Builder")
let (firstname,lastname) = person
let (_,surname) = person
如果我们不关心名字,我们不需要得到它,但仍然可以使用相同的语法,我们只需要使用
\uuu
来表示我们不关心这个值

参考文献