List.init(F#)的第二个参数中需要澄清
你能解释一下List.init中的第二个参数吗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作为参数的通配符占位符,并返回一个随机数
让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
来表示我们不关心这个值
参考文献