有没有像List.init,但形式"int - >'T - >'T list"而不是?

dev*_*ium 1 .net f#

我正在寻找一种方法来尝试简化以下表达式,看起来很难看,IMO:

List.map (fun _ -> generateIndividual()) [1..popSize]
Run Code Online (Sandbox Code Playgroud)

我找到了List.init,但它仍然不是我想要的:

List.init popSize (fun x -> generateIndividual())
Run Code Online (Sandbox Code Playgroud)

它是完美的,它不是lambda表达式的参数.这样做很完美:

List.init popSize generateIndividual()
Run Code Online (Sandbox Code Playgroud)

F#库中有什么东西可以帮助我清理它吗?

谢谢

Ank*_*kur 6

由于unit(void)也是一种类型,你可以这样做:

List.init popSize (ignore >> generateIndividual)
Run Code Online (Sandbox Code Playgroud)


Jon*_*rop 5

并不是的.最接近的解决方案是改变generateIndividual函数的定义,使其接受任何类型的值(而不仅仅是类型的值unit)并丢弃它:

let generateIndividual _ = ...
Run Code Online (Sandbox Code Playgroud)

然后你可以写:

List.init popSize generateIndividual
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用列表理解:

[for _ in 1..popSize -> generateIndividual()]
Run Code Online (Sandbox Code Playgroud)